Extrai informações dos arquivos para saída com o nome do arquivo concatenado e separado por vírgulas

0

Eu tenho um diretório com vários arquivos com a extensão .failed Esse número de arquivos pode mudar todos os dias. Esses arquivos possuem o seguinte formato:

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

Eu preciso extrair todo o texto entre THEAD | e | 2 para um arquivo de saída. estou tentando o seguinte e funciona apenas se eu tiver apenas um arquivo no diretório.

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

A saída é: transactions.log:

150001021
150001022

Agora, como posso fazer o mesmo, mas para vários arquivos? (número indeterminado de arquivos).

Além disso, é possível adicionar o nome do arquivo em todas as linhas do arquivo de saída da seguinte forma:

saída esperada:

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

Obrigado antecipadamente,

    
por Carlos Pinho 26.01.2017 / 00:34

1 resposta

1

(testado com gawk e 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
    
por 26.01.2017 / 00:45