Awk может обрабатывать эти многострочные записи, устанавливая разделитель записей в пустую строку:
BEGIN { RS = ""; ORS = "\n\n" }
$2 == "some string" { next } # skip this record
{ print } # print (non-skipped) record
Вы можете сохранить это в файл (например, remove.awk
) и выполнить его с помощью awk -f remove.awk data.txt > newdata.txt
Предполагается, что ваши данные имеют формат:
header
data
....
header
data
...
Если между записями нет пустых строк, необходимо вручную разделить записи (это 4 строки на запись):
{ a[++i] = $0 }
i == 2 && a[i] == "some string" { skip = 1 }
i == 4 && ! skip { for (i = 1; i <= 4; i++) print a[i] }
i == 4 { skip = 0; i = 0 }