AWK 阈值大于

AWK Threshold Greater Than

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

[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

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

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

此脚本每 10 行处理一次总和,如果超过 1000 行则打印结果:

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

如果你想要1000个阈值作为参数,我让你选择如何将参数传递给awk。例如,您可以按照此处所述在命令行中使用 -v var=valhttps://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 脚本并重定向输出。

希望对您有所帮助。