AWK阈值大于

时间:2015-05-07 16:07:52

标签: bash awk grep threshold

我在文件夹中有文本文件,如下所示:

[13]pkt_size=140
[31]pkt_size=139
[49]pkt_size=139
[67]pkt_size=140
[85]pkt_size=139
[103]pkt_size=139
[121]pkt_size=140
[139]pkt_size=139
[157]pkt_size=139
[175]pkt_size=140
[193]pkt_size=139
[211]pkt_size=139
[229]pkt_size=3660
[253]pkt_size=140
[271]pkt_size=139
[289]pkt_size=139
[307]pkt_size=5164
[331]pkt_size=140
[349]pkt_size=139
[367]pkt_size=139
[385]pkt_size=7512

我想设置threshold = 1000,然后我希望脚本对文件中的每个10行求和,然后如果总和是>阈值然后打印输出。

但我想为文件夹和脚本运行该脚本必须创建输出的单个文件。

1 个答案:

答案 0 :(得分:1)

此脚本将每10行处理总和,并在超过1000时打印结果:

$ cat sum.awk 
BEGIN {
    FS = "="
}
{ acc += $2 }
(NR % 10) == 0 { if (acc > 1000) { print acc } acc = 0; }
$ awk -f sum.awk yourfile.txt 
1394
9938
$ 

如果您希望1000阈值成为参数,我会让您选择如何将参数传递给awk。例如,您可以在命令行中使用-v var=val,如下所述:https://www.gnu.org/software/gawk/manual/gawk.html#Options

关于为每个文件运行命令并生成输出文件,这里xargs来救援。请在此处查看此示例:

$ ls
sum.awk  yourfile.txt  zzzzzzz.txt
$ ls *.txt
yourfile.txt  zzzzzzz.txt
$ ls *.txt | xargs -L 1 -I {} /bin/bash -c 'awk -f sum.awk {} > {}.output'
$ ls
sum.awk  yourfile.txt  yourfile.txt.output  zzzzzzz.txt  zzzzzzz.txt.output
$ 

xargs将为输入中的每一行运行命令。默认情况下,它会尝试在每次执行中对多行进行分组,但我们会使用-L 1设置来阻止这一行。

接下来,我们使用-I {}参数声明占位符字符串{},它将是每一行(文件名)。

最后:执行/bin/bash -c '<what to execute>'在我们的文件上运行awk脚本并重定向输出。

希望它有所帮助。