Converte um arquivo orientado por colunas para saída CSV usando o shell script

0

Eu tenho um arquivo que vem do mapa para reduzir a saída para o formato abaixo que precisa de conversão para CSV usando o shell script. Os valores dinâmicos são cinco valores e eles são os IDs de transação e os quatro campos (2000, ABC corp, .., BE900000075000027) depois disso e eles continuam mudando para a próxima ID de transação, apenas os outros 17 valores (25-MAY-15 , 04: 20 até a vida padrão) é constante.

25-MAY-15
04:20
Client
0000000010
127.0.0.1
PAY
ISO20022
PAIN000
100
1
CUST
API
ABF07
ABC03_LIFE.xml
AFF07/LIFE
100000
Standard Life 

================================================
================================================

AFF07-B000001

 2000

ABC Corp
..

BE900000075000027


AFF07-B000002

 2000

XYZ corp
..

BE900000075000027



AFF07-B000003

 2000

3MM corp
..

BE900000075000027

Precisa de saída no formato abaixo

25-MAY-15,04:20,Client,0000000010,127.0.0.1,PAY,ISO2002,PAIN000,100,1,CUST,API,ABF07,ABC03_LIFE.xml,AFF07/LIFE,100000,Standard Life, 25-MAY-15,04:20,Client,0000000010,127.0.0.1,PAY,ISO2002,PAIN000,100,1,CUST,API,AFF07-B000001, 2000,ABC Corp,..,BE900000075000027

25-MAY-15,04:20,Client,0000000010,127.0.0.1,PAY,ISO2002,PAIN000,100,1,CUST,API,ABF07,ABC03_LIFE.xml,AFF07/LIFE,100000,Standard Life, 25-MAY-15,04:20,Client,0000000010,127.0.0.1,PAY,ISO2002,PAIN000,100,1,CUST,API,AFF07-B000002,2000,XYZ Corp,..,BE900000075000027

Preciso que os valores sejam repetidos imediatamente antes das duas linhas tracejadas, juntamente com o restante da saída para o ID de transação AFF07-B000001, AFF07-B000002, AFF07-B000003 Não há linhas de traço no arquivo real, eu adicionei-o para garantir uma melhor compreensão do arquivo de entrada

    
por Gokul 09.09.2015 / 02:57

1 resposta

1

assumindo que existem 5 campos a serem repetidos, use o seguinte awk

BEGIN { header=1 ; }
length($0) == 0 { header=0 }
length($0) > 0 {
    if ( header ) { str_h= str_h "," $0 ;}
        else {
        str_f = str_f "," $0 ;
        c++ ;
            if ( c == 5 ) {
               printf "%s%s\n",substr(str_h,2),str_f ;
               c = 0 ;
               str_f = "" ;
            }
         }
}
    
por 09.09.2015 / 09:34