Более подробный пример ввода:
$ cat file
This is test line 999
This is test line 11
This is test line 999
This is test line 12
This is test line 13
This is test line 999
This is test line 999
This is test line 999
This is test line 14
This is test line 15
This is test line 16
This is test line 999
This is test line 17
This is test line 18
Попробуйте:
$ cat tst.awk
$NF == 999 {
prev = ""
next
}
{
printf "%s", prev
prev = $0 ORS
}
END {
printf "%s", prev
}
$ awk -f tst.awk file
This is test line 12
This is test line 14
This is test line 15
This is test line 17
This is test line 18
или, если вы предпочитаете краткость, а не ясность:
$ awk '$NF==999{p="";next} {printf "%s",p; p=$0 ORS} END{printf "%s",p}' file
This is test line 999
This is test line 11
This is test line 999
This is test line 12
This is test line 13
This is test line 999
This is test line 999
This is test line 999
This is test line 14
This is test line 15
This is test line 16
This is test line 999
This is test line 17
This is test line 18
Обратите вниманиечто вышеприведенное будет работать, даже если какая-то другая часть вашей строки, кроме последнего поля, содержала 999
или если последнее поле как 9999
вместо вашей цели 999
, для нее не требуется писать 999
/проверено несколько раз в скрипте, если вы хотите проверить, скажем, 3-е поле в строке вместо последнего, вы можете просто изменить $NF
на $3
=, если вы хотите проверить всю строку на регулярное выражениевы просто изменили бы $NF==999
на /999/
, это будет работать, даже если ваша целевая строка содержит метасимволы регулярных выражений, и будет работать в любом awk в любой оболочке в любом окне UNIX.