2014-11-22 1 views
0

У меня есть файл:AWK и регулярное выражение из файла

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

я должен напечатать каждое слово, которое содержит в конце/е, о, г/буквы в каждой строке 1,3,5.N. Результат должен быть: apple, tomato, empty. я могу отделить 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 концы с e или o или y

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 установлен в пространстве или строки, поэтому он будет работать один и одно слово на каждой строке.

Смежные вопросы