标签: awk

awk对一列进行求和,并在每行输入上打印该总和

file.txt看起来像这样:

1 12
2 18
3 45
4 5
5 71
6 96
7 13
8 12
Run Code Online (Sandbox Code Playgroud)

我可以这样总结第二列:

awk '{ sum += $2 } END { print sum }' file.txt

272

我能在每一行打印这笔钱的最好方法是什么?这就是我所期待的:

1 12 272
2 18 272
3 45 272
4 5 272
5 71 272
6 96 272
7 13 272
8 12 272
Run Code Online (Sandbox Code Playgroud)

bash awk printf sed

23
推荐指数
2
解决办法
6万
查看次数

做尾巴-F直到匹配模式

我想在文件上做一个尾部-F,直到匹配一个模式.我找到了一种使用awk的方法,但恕我直言,我的命令并不是很干净.问题是我需要在一行中完成,因为有一些限制.

tail -n +0 -F /tmp/foo | \
awk -W interactive '{if ($1 == "EOF") exit; print} END {system("echo EOF >> /tmp/foo")}'
Run Code Online (Sandbox Code Playgroud)

尾部将阻塞,直到EOF出现在文件中.它工作得很好.END块是强制性的,因为awk的"退出"不会立即退出.在退出之前使awk评估END块.END块在读取调用时挂起(因为尾部),所以我需要做的最后一件事就是在文件中写入另一行来强制尾部退出.

有人知道更好的方法吗?

shell awk sed tcl tail

22
推荐指数
4
解决办法
2万
查看次数

在bash中按日期字段排序日志

让我们

126 Mar  8 07:45:09 nod1 /sbin/ccccilio[12712]: INFO: sadasdasdas
  2 Mar  9 08:16:22 nod1 /sbin/zzzzo[12712]: sadsdasdas
  1 Mar  8 17:20:01 nod1 /usr/sbin/cron[1826]: asdasdas
  4 Mar  9 06:24:01 nod1 /USR/SBIN/CRON[27199]: aaaasdsd
  1 Mar  9 06:24:01 nod1 /USR/SBIN/CRON[27201]: aaadas
Run Code Online (Sandbox Code Playgroud)

我想按日期和时间键对此输出进行排序.

非常感谢你.

马丁

linux sorting bash scripting awk

22
推荐指数
4
解决办法
6万
查看次数

awk返回的字段数

有没有办法让awk返回符合字段分隔符标准的字段数?比如说,我的文件包含

a b c d
Run Code Online (Sandbox Code Playgroud)

所以,awk --field-separator=" " | <something>应该返回4

awk

22
推荐指数
2
解决办法
8万
查看次数

使用awk循环输入字符串中的字符

信不信由你,我找不到我认为这个基本问题的答案.

在awk中,我如何逐个字符地循环输入字符串?假设我只想将它们打印出来.我可以访问一个数组吗?或者我需要使用substr?

基本上,像:

echo "here is a string" | awk '
{ for(i=0; i<[length of input string]; i++) 
    printf [value at index i in array x]; 
}'
Run Code Online (Sandbox Code Playgroud)

坦率地说,我很尴尬.

string awk for-loop

22
推荐指数
3
解决办法
3万
查看次数

如何运行.awk文件?

我正在将CSV文件转换为表格格式,我写了一个AWK脚本并将其保存为my.awk.这是我的脚本:

#AWK for test
awk -F , '
    BEGIN {
        aa = 0;
    }
    {
        hdng = "fname,lname,salary,city";
        l1 = length($1);
        l13 = length($13);
        if ((l1 > 2) &&  (l13 == 0)) {
            fname = substr($1, 2, 1);
            l1 = length($3) - 4;
            lname = substr($3, l1, 4);
            processor = substr($1, 2);
            #printf("%s,%s,%s,%s\n", fname, lname, salary, $0);
        }

        if ($0 ~ ",,,,")
            aa++
        else if ($0 ~ ",fname")
            printf("%s\n", hdng);
        else if ((l1 > 2) && (l13 == …
Run Code Online (Sandbox Code Playgroud)

awk

22
推荐指数
3
解决办法
10万
查看次数

awk中的绝对值不起作用?

我想选择第9列的绝对值小于500的文件行.列有时是正数,有时是负数.

awk -F'\t' '{ if ($9 < |500|) {print $0} }' > output.bam
Run Code Online (Sandbox Code Playgroud)

到目前为止这不起作用..互联网上的一轮告诉我要使用我们应该添加的绝对值

func abs(x) { return (x<0) ? x*-1 : x }
Run Code Online (Sandbox Code Playgroud)

那我怎么想把它与第9列的值一起?我不知道什么是正确的语法..

awk absolute

22
推荐指数
2
解决办法
3万
查看次数

如何在unix命令行中分割文件?

我正在为一个天真的布尔信息检索系统做更快的测试,我想使用awk,grep,egrep,sed或类似的东西和管道将文本文件拆分成单词并将它们保存到其他文件中,每行一个单词.示例我的文件cotains:

Hola mundo, hablo español y no sé si escribí bien la
pregunta, ojalá me puedan entender y ayudar
Adiós.
Run Code Online (Sandbox Code Playgroud)

输出文件应包含:

Hola
mundo
hablo
español
...
Run Code Online (Sandbox Code Playgroud)

谢谢!

unix awk command-line tokenize

22
推荐指数
2
解决办法
3万
查看次数

如何将文件中的列添加到另一个文件

我有一个有两列的文件

1 1
2 3
3 4
Run Code Online (Sandbox Code Playgroud)

以及一列为的文件

6
7
9
Run Code Online (Sandbox Code Playgroud)

我想在第一个文件中添加第二个文件.输出应该是:

1 1 6
2 3 7
3 4 9
Run Code Online (Sandbox Code Playgroud)

bash awk

22
推荐指数
2
解决办法
5万
查看次数

通过短哈希获取GIT提交消息的更好方法是什么?

嘿伙计们,我现在通过使用下面的内容获取某个提交哈希的提交消息

hash='b55da97'
git log --pretty=oneline ${hash} | grep "${hash}" | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)

这些看起来效率极低,是否有更聪明更便宜的方法,或者我坚持使用grepping和awking?

git bash awk grep git-log

22
推荐指数
3
解决办法
1万
查看次数

标签 统计

awk ×10

bash ×4

sed ×2

absolute ×1

command-line ×1

for-loop ×1

git ×1

git-log ×1

grep ×1

linux ×1

printf ×1

scripting ×1

shell ×1

sorting ×1

string ×1

tail ×1

tcl ×1

tokenize ×1

unix ×1