Извлечь информацию из файлов для вывода с объединением файлов и разделением запятыми

У меня есть каталог с несколькими файлами с расширением .failed Это количество файлов может меняться каждый день. Эти файлы имеют следующий формат:

file1.failed:

FHEAD|4525|20170109000000|20170125024831
THEAD|150001021|20170109121206||
TDETL|4000785067||1|EA|||RETURN|||N
TTAIL|1
THEAD|150001022|20170109012801||
TDETL|4000804525||1|EA|||RETURN|||N
TTAIL|1
FTAIL|6

Мне нужно извлечь весь текст между THEAD | и | 2 в выходной файл. Я пробую следующее, и это работает, только если у меня есть только один файл в каталоге.

sed -n 's:.*THEAD|\(.*\)|2.*:\1:p' <*.failed >transactions.log

Результат: transaction.log:

150001021
150001022

Как я могу сделать то же самое, но для нескольких файлов? (количество файлов не определено).

Также можно добавить имя файла в каждую строку выходного файла следующим образом?

ожидаемый результат:

file1.failed,150001021
file1.failed,150001022
file2.failed,150001023
file2.failed,150001024
file2.failed,150001025
file2.failed,150001026
file3.failed,150001027
file3.failed,150001028

Заранее спасибо,

0
26.01.2017, 01:34
1 ответ

(проверено с gawk и mawk )

awk -F'|' '$1 == "THEAD" {print FILENAME, $2}' OFS=, file*.failed > transactions.log

cat transactions.log 
file1.failed,150001021
file1.failed,150001022
file2.failed,150001023
file2.failed,150001024
file3.failed,150001025
file3.failed,150001026
1
28.01.2020, 02:46

Теги

Похожие вопросы