我在文件夹中有文本文件,如下所示:
[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
行求和,然后如果总和是>阈值然后打印输出。
但我想为文件夹和脚本运行该脚本必须创建输出的单个文件。
答案 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脚本并重定向输出。
希望它有所帮助。