簡體   English   中英

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

我想設置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=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腳本並重定向輸出。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM