Я использую awk для обработки многострочных записей, где количество полей в записи неизвестно. Это необходимо для фильтрации записей в очень большом файле, поэтому было бы полезно узнать номер строки возвращаемых записей. Я пытался инкриминировать переменную для каждой записи, но это выглядит странно, есть ли лучший способ сделать это?
Пример данных (включая номера строк):
1 | data1 - good
2 | foo bar
3 |
4 | data2 - bad
5 | foo bar
6 | pet cat
7 | name snuggles
8 |
9 | data3 - good
10| foo bar
11| color blue
Пример кода:
BEGIN {RS =""; FS="\n"; ORS="\n\n"; OFS=""; x=0}
{
{ x += NF + 1; }
{ if ($1 ~ /bad/) { next; } }
{ print "[", x - NF, "]\n", $0; }
}
Вывод, который я ищу, будет примерно таким:
[1]
data1 - good
foo bar
[9]
data3 - good
foo bar
color blue
Есть ли лучший способ сделать это, чего я не вижу?