2014-02-05 70 views
0

我有一個awk命令打印出來的時間「200」的總數發生在列26awk中具有可變

awk '$26 ~ /200/{n++}; END {print n+0}' testfile 

如何修改這個說法,所以我可以傳遞200作爲一個變量?例如如果我提前

+0

如果'code'的值爲' 20'和數字'200'出現在字段26中,如果匹配或不匹配?你是在尋找場地26的整體還是隻有一部分? –

回答

3
awk '$26 ~ code {n++} END {print n+0}' code=200 testfile 

如果在命令行上的文件名的形式的VAR與200個

感謝的值的變量$代碼= VAL它被當作一個可變 分配。變量var將被賦值val。

§ Awk Program Execution

+0

這是我不知道的東西,但是在'AWK編程語言'中查看它之後要注意:文件名var = val賦值是在該參數將作爲文件訪問時執行的。這種類型的賦值允許在讀取文件之前和之後更改變量。「這意味着該順序很重要。 – n0741337

+0

@ n0741337在BEGIN部分中沒有提供正確和變量分配的方法,這可能導致混淆/錯誤。如果您需要更改文件之間的變量值,則只應使用此方法,否則'awk -v awkvar =「$ shellvar」'幾乎總是正確的方法。有關更多詳細信息,請參閱我在http://cfajohnson.com/shell/cus-faq-2.html#Q24上爲comp.unix.shell常見問題編寫的文章。 –

2
awk -v var="$shellVar" '$26~var{n++} END{print n}' file 

你看到上面這一行如何使用shell變量在awk中。一些筆記爲您的awk單行:

  • print n+0沒有必要。因爲你所定義的n,而不是輸入文本摘下來的,你明確地做了n++,所以它是數字型,n+0是沒有意義的

  • END;應當去除

  • 我複製你的代碼關於檢查200部分。但風險很大。如果$ 26只是一個數字,你可以考慮使用在這種情況下使用正則表達式1*$26 == 200$26 == "200"可能會導致錯誤的結果,想想你的$ 26值:20200