2017-08-15 52 views
0

我打算將某些字符集匹配到某個單詞的中間,在此處檢查單詞的開始和結尾(它不能匹配第一個或最後一個字符,否則我的目標是無效的)。然後我檢查它是否在使用AWK在沒有指定打印的情況下打印到我的輸出文件的代碼行

$1~/xampl/ 

字存在的代碼中,我拿出的作品完美,該生產線採用

awk -f awkfile inputfile > outputfile 

時除外我的理想,只是希望它存在增量和不打印,但它每次匹配打印...我錯過了什麼?

+0

我不能在這裏重現這種行爲;也許你的awk腳本的不同部分正在做它? –

回答

1

awk程序遵循這種結構:

CONDITION { ACTIONS } [ CONDITION { ACTIIONS } ... ] 

其中任一條件或行動是可選的。如果條件不存在,這樣的:

awk '{ print }' 

awk將假定條件是true和輸入的每一行執行{ print }

如果行動是缺少,像這樣(類似於你的情況):

awk '$1~/xampl/' 

awk將運行默認操作,這是{print}。如果你不想打印,但只是增加你需要添加一個動作,像這樣:

awk '$1~/xampl/ { c++ }' 
0

如果我正確理解你的問題,那麼只有當它出現在第一個字段中間時,你的表達纔會匹配這個詞。你後綴索引是關閉的兩個;它應該是:

#!/usr/bin/awk -f 
"xampl"!=substr($1, 1, length("xampl")) && "xampl"!=substr($1, length($1)-length("xampl")+1, length("xampl")) && $1~/xampl/ {exists+=1} 

可縮短到:

#!/usr/bin/awk -f 
$1~/.+xampl.+/ {exists++} 

然而,這些有沒有副作用腳本,即所有你要做的就是增加一個變量,但你永遠不打印它。這使我相信你的錯誤實際上是在你沒有向我們展示的腳本的其他部分。無論如何,從文件調用時,您的awk程序不應該有不同的行爲。

相關問題