Usando o AWK para combinar arquivos

1

Eu tenho uma pasta com arquivos de texto separados por tabulação. Todos eles têm o mesmo formato. Aqui está um link para os dados de amostra:

link

(Este exemplo tem os 5 cabeçalhos, 5 linhas de dados que eu quero e todos os dados finais que eu quero não querem.)

Eu quero remover completamente as primeiras quatro linhas de cabeçalho, depois usar o quinto como cabeçalho para todas as linhas em um único arquivo que combina os dados - SEM os dados finais.

Eu também quero acrescentar dois campos: um campo de nome de arquivo e outro para o valor de Prelim 4. Assim, a saída ficaria assim:

Filename    Curr    Storefront Name Identifier  M-Type  Quantity    Net Amt Net Amt Total   Code    Title   Item    A-Type  B-Type  Vendor_ID   Offline Indicator   company donotuse
file1   ZAR ZA  44056971    Family Monthly PAID 1   .061038 .061038 US3E40400141    subtitle1   person  1   1   US3E40400141    1   BlueMelon   
file2   ZAR ZA  44056975    Family Monthly PAID 1   .061038 .061038 US3E40400142    subtitle2   person2 1   1   US3E40400142    1   BlueMelon   
file3   ZAR ZA  44057007    Family Monthly PAID 1   .061038 .061038 US3E40400144    subtitle3   person3 1   1   US3E40400144    1   BlueMelon   
...
file179 ZAR ZA  44057330    Family Monthly PAID 1   .061038 .061038 US3E40400107    subtitle5   person5 1   1   US3E40400107    1   BlueMelon

Eu sou um noobie COMPLETO para scripts de shell. Literalmente 1 semana de experiência.

Para adicionar o primeiro campo, cheguei até aqui e estou preso:

gawk 'NR==5;FNR>5 {print FILENAME,"\t",$0} /Row/ {f=0; nextfile} f' *.txt > result.txt

Eu não tenho idéia de como adicionar o segundo campo (o valor dos dados preliminares 4).

Qualquer ajuda? Obrigado!

    
por Steve 15.08.2017 / 21:19

2 respostas

0

Já que você parece ter o GNU awk, que tal

gawk '
  /^Row Count/ {nextfile} 
  NR == 5 {$0 = "Filename" OFS $0; print} 
  FNR > 5 {$0 =  FILENAME  OFS $0; print}
' OFS='\t' *.txt
    
por 15.08.2017 / 22:54
1
awk 'FNR == 4 { pd4=$2; };
     NR == 5 { print $0 " FILENAME PD4";};
     FNR == 6 { print $0 " " FILENAME " " pd4; nextfile; }' file1 file2
    
por 15.08.2017 / 22:07

Tags