[英]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
我想設置threshold = 1000
,然后我希望腳本對文件中的每10
行求和,然后如果總和> threshold則輸出輸出。
但是我想為文件夾運行該腳本,並且腳本必須創建輸出的單個文件。
該腳本將每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腳本並重定向輸出。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.