Obtém string do nome do arquivo para o arquivo de saída mais a string dentro do mesmo arquivo

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_string2_1.failed:

FHEAD|string2|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 as próximas 2 seqüências após THEAD | para um arquivo de saída separado por vírgula. Eu também preciso do nome do arquivo e da string2 extraídos para este arquivo de saída. Observe que string2 pode ser usado a partir do nome do arquivo ou da tag FHEAD.

saída esperada:

file1_string2_1.failed,string2,150001021,20170109121206
file1_string2_1.failed,string2,150001022,20170109012801
file2_string2_1.failed,string2,150001023,20170109100904
file2_string2_2.failed,string2,150001024,20170109031206
file2_string2_3.failed,string2,150001025,20170109081207
file3_string2_1.failed,string2,150001026,20170109141203
file3_string2_2.failed,string2,150001027,20170109121208
file4_string2_1.failed,string2,150001028,20170109171206

Por enquanto eu tenho o seguinte comando:

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

A saída que estou recebendo é:

file1_string2_1.failed,150001021
file1_string2_1.failed,150001022
file2_string2_1.failed,150001023
...
    
por Carlos Pinho 02.02.2017 / 01:14

1 resposta

0

Você pode dividir FILENAME em campos separados por sublinhado e colocar o resultado em uma matriz

split(FILENAME,a,"_")

Depois disso, é apenas uma questão de adicionar os elementos necessários à declaração print

print FILENAME, a[2], $2, $3

Então

awk -F'|' '$1 == "THEAD" {split(FILENAME,a,"_"); print FILENAME, a[2], $2, $3}' OFS=, *.failed > failed_transactions.out
    
por 02.02.2017 / 01:25