Добавление разделителя после каждого файла, обработанного в awk - PullRequest
1 голос
/ 16 декабря 2010

У меня есть несколько файлов, в которых я извлекаю текст между двумя разделителями (START и END, не включая).После обработки каждого файла я хочу вывести разделитель, указывающий, что файл был обработан, скажем, строка «END».Как добавить строку «END» в выходной файл после каждого обработанного файла?Например,

Скажем, у меня есть два файла с содержанием

file1.txt

line 1
line 2
START
I want to extract this text
and this text
END
line 3
line 4

и

file2.txt

line10
line20
START
I also want this text.
END
line 30

Я знаю, если я выполню следующее:

awk '/START/,/END/{if (!/START/&&!/END/) print}' test*.txt

Я получу следующий вывод:

I want to extract this text
and this text
I also want this text.

Но вывод, который я хочу:

I want to extract this text
and this text
END
I also want this text.
END

Как получить строку «END», добавленную к выводу после обработки каждого файла?

Ответы [ 3 ]

1 голос
/ 16 декабря 2010
FNR==1 && NR!=1 {print "END"}
END {print "END"}

Итак, у вас будет:

awk 'FNR==1 && NR!=1 {print "END"} /START/,/END/{if (!/START/&&!/END/) print} END {print "END"}' test*.txt
0 голосов
/ 17 декабря 2010

Вы просите awk пропустить печать END.Прекрати это.

awk '/START/,/END/{if (!/START/) print}' test*.txt
0 голосов
/ 16 декабря 2010

переменная FNR сбрасывается в 0 для каждого нового файла, поэтому вы можете включить триггер правила (FNR == 0 && NR! = 0):

(FNR==0) && (NR!=0) {
  print "END"
}
END {
  print "END"
}
...