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=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 脚本并重定向输出。
希望对您有所帮助。
我的文件夹中有文本文件,如下所示:
[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=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 脚本并重定向输出。
希望对您有所帮助。