2017-01-13 4 views
1

Дано входной файл, содержащий несколько строк моей целевойВыбор один выход, когда регулярное выражение соответствует более одного раза

... 
100 100 100 100 
Expression: out1 
200 200 200 200 
300 300 300 300 
Expression: out2 
400 400 400 400 
500 500 500 500 
Expression: out3 
... 

Если я делаю

awk '/Expression:/ {printf " %f ",$2 } ' $file 

Я получаю несколько выходов

out1 out2 out3 

Как я мог выбрать только один из результатов, основанный на позиции, которую они нашли в файле, например out3?

+0

ли в той же строке 3 колонки существуют? –

+0

@ Manolete: Просьба опубликовать некоторый образец Input_file и ожидаемого вывода проб. – RavinderSingh13

+0

@ RavinderSingh13 Сделано – Manolete

ответ

1

For - Если п число строк найдено для регулярного выражения совпадают, то, как выбрать последний?

awk '/Expression:/ { last_found = $2 }END{print last_found }' file 

Показать энный матч для данного регулярного выражения

awk '/Expression:/ { if(++i==3){ print $2; exit } }' file 

Входной

[email protected]:~$ cat f 
... 
100 100 100 100 
Expression: out1 
200 200 200 200 
300 300 300 300 
Expression: out2 
400 400 400 400 
500 500 500 500 
Expression: out3 
... 

Выход

# for 3rd one 
[email protected]:~$ awk '/Expression:/ { if(++i==3){ print $2; exit } }' f 
out3 

# For 2nd one 
[email protected]:~$ awk '/Expression:/ { if(++i==2){ print $2; exit } }' f 
out2 

# For last one 
[email protected]:~$ awk '/Expression:/ { last_found = $2 }END{print last_found }' f 
out3 
0

попробовать:

awk '/Expression/{print $NF}' Input_file 
OR 
awk '/Expression/{print $2}' Input_file 
+0

Могу ли я попросить вас добавить еще какой-нибудь контекст вокруг вашего ответа. Кодовые ответы трудно понять. Это поможет читателю и будущим читателям, если вы сможете добавить дополнительную информацию в свой пост. – RBT

1

Просто подсчета вхождений и распечатать последнее значение после того, как счетчик достиг порогового значения:

awk '/Expression/{c+=1;s=$2};c==3{print s}' 
Смежные вопросы