nawk/awk: Как вывести сообщение об ошибке, когда нет совпадения строк?

Начну с того, что этот форум является отличным источником знаний. Мне нужна ваша помощь в представлении сообщения об ошибке "Нет совпадения".

printf "some\nwhere\nonly\nwe\nknow\n" > test.txt 

Я ищу "только" строку и, если есть совпадение, она будет представлена

nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=0 a=0 s="only" test.txt | awk '{if ($0 ~ /only/) print; else print "No Match"}'

Выход: только

Если я ищу строку "only" и проверяю, есть ли в этой строке также яблоко, я получу сообщение No match

nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=0 a=0 s="only" test.txt | awk '{if ($0 ~ /apple/) print; else print "No Match"}'

Выход: нет совпадений

НО, если я ищу строку 'apple' (ее нет) и проверяю, есть ли она, я не получаю сообщение 'No Match'.

nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=0 a=0 s="apple" test.txt | awk '{if ($0 ~ /apple/) print; else print "No Match"}'

Выход пуст. Как я могу изменить это поведение, я хочу получить сообщение "Нет совпадения".

1 ответ

Решение

В awk.

Если поисковая фраза не найдена вообще.

awk '/searchphrase/{c++} END{if(c == 0) print "No Match"}' file

Если вы хотите напечатать без совпадения для каждой строки без совпадения.

awk '!/searchphrase/{print "No Match"}' file

Если вы все еще хотите напечатать поисковую фразу, когда найдете

awk '/searchphrase/{c++; print} END{if(c == 0) print "No Match"}' file
Другие вопросы по тегам