2016-02-12 36 views
-2

我想在正則表達式之後打印FILENAME if字段小於150.這是我想出的代碼。但是輸出什麼都不產生。awk打印FILENAME如果正則表達式之後的字段小於

awk '{for(i=1;i<=NF;i++){ if($i=='price' && $(i+1) < 150){print FILENAME} } }" files* > filenames 
+0

這不是在正則表達式後面尋找一個字段,而是在**字符串**之後尋找一個字段。理解差異非常重要。發佈一些示例輸入和預期輸出,我們可以幫助您。 –

回答

0

您的命令中存在拼寫錯誤(末尾缺少引號)。我確實這樣改變它:

awk '{for(i=1;i<=NF;i++){ if($i=="price" && $(i+1) < 150){print FILENAME} } }' files* > filenames 

而且......就我可以測試...它的工作。

+0

取決於「作品」的含義。這可能會修復OP代碼,但我可以想象各種輸入集可能會產生不合需要的結果(例如,「價格」在一行中出現不止一次,或者在「價格」可能是字符串之後的字段中,或者在數以千計的字段後'價格'或....)。在OP向我們展示至少幾行樣本輸入和預期輸出並澄清他的要求之前,誰知道....? –

+0

的確如此:「起始價格」 - 「價格已實現」所以現在我得到了正確的代碼:awk'{for(i = 1; i <= NF; i ++)if($ i〜/ Starting/&& $ (i + 1)〜/ price/&& $(i + 2)<= 150)print FILENAME,$(i + 2)}' – sdf