Добавление разделителя после каждого файла, обработанного в AWK

StackOverflow https://stackoverflow.com/questions/4464360

  •  11-10-2019
  •  | 
  •  

Вопрос

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

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

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

Как мне добавить строку «конец» в выход после обработки каждого файла?

Это было полезно?

Решение

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

Другие советы

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

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

Вы просите Awk пропустить конец печати. Прекрати это.

awk '/START/,/END/{if (!/START/) print}' test*.txt
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top