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