2014-11-22 60 views
0

我有一個文件:AWK和正則表達式從文件

first basket with apple 
second basket with apricota 
third basket with tomato 
fourth basket with olives 
fifth empty basket 

我必須打印包含在端/ E,O,Y /每個1,3,5.N字母串的每個單詞。 結果必須是:蘋果,番茄,空。 我可以單獨1,3,5字符串,但不能在字符串每個字分開,並檢查它

awk '{if (NR % 2 != 0); {if (/(y|e|o)$/) print $0}}' inputfile 

,並在結果

first basket with apple 

回答

1

您可以使用類似

$ awk 'NR % 2 { for (i=1; i<=NF; i++) if ($i ~ /[eoy]$/) print $i}' input 
apple 
tomato 
empty 

它做什麼?

  • NR % 2選擇線1 3 5 ...

  • if ($i ~ /[eoy]$/)檢查每個字段,wrod與eoy

1

結束就像你想要的東西似乎像這樣,

$ awk '{for(i=1;i<=NF;i++){if($i ~ /.*(e|o|y)$/){print $0}}}' file 
first basket with apple 
third basket with tomato 
fifth empty basket 

,僅保留的話,

$ awk '{for(i=1;i<=NF;i++){if($i ~ /.*(e|o|y)$/){print $i}}}' file 
apple 
tomato 
empty 
0

這裏是一個gnu awk溶液(由於RS多個字符):

awk -v RS=" |\n" '/([yeo])$/' file 
apple 
tomato 
empty 

這裏RS設置爲空格或換行,所以它會運行一個每行有一個字。