2017-04-09 26 views
0
echo '# x y z w '| awk '/\w/{++cnt} END {print "Count = ", cnt}' 
1 

如何輸出4作爲結果?
x和y以及z和w,其中四個匹配模式\ w
對於這裏# x y z w字符串,所有匹配的次數爲4如何用awk統計所有匹配的時間?

+0

'awk'默認作爲記錄工作,你想遍歷所有字段或設置RS爲空白。 – karakfa

回答

1

什麼你試圖做任何遍歷所有領域和計數,或更改RS使awk會爲你

echo '# x y z w ' | awk -v RS=' +' '/\w/{++cnt} END {print "Count = ", cnt}' 

然而,更好的方法,這將是行多行輸入工作線可

echo '# x y z w ' | awk '{print "Count:", gsub(/\w/,"&")}' 

既可能是特定GNU和你awk可能不支持,所以

... | awk '{for(i=1;i<=NF;i++) if($i~/\w/) cnt++} END{print ...' 
+0

所有這些解決方案都是GNU特有的'\ w'。將'\ w'更改爲POSIX括號表達式,然後由於多字符RS,只有第一個將仍然是gawk特有的。 –

+0

echo'#x y z w'| awk'{print'Count:「,gsub(/ \ w + /,」&「)}' –

+0

是的,目前它計算的是字符,而不是單詞。 – karakfa