como dividir registros de múltiplas linhas pelo awk?

2

Como dividir registros de várias linhas por awk, ou seja, abaixo do arquivo:

027,027,0,3,,1,0,1,1,0,0,0,0,0,0,0,0,6,1,,1.211100,1,2015-08-03,2015-07-04,,2015-11-01,0,0,2015-11-01,1,1,,0,0,0,0,0,131,0,0,0,0,0,2015-06-01,10000000000000000000,,
136,136,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1,1,,0.350000,1,2015-08-17,2015-07-18,,2015-11-15,0,0,2015-11-15,0,0,,0,0,0,0,0,131,0,0,0,0,0,2012-11-20,10000000000000000000,,
633,633,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,3,1,,3.125300,1,2015-08-31,2015-08-01,,2015-11-29,0,0,2015-11-29,0,0,,0,0,0,0,0,131,0,0,0,0,0,2014-12-12,10000000000000000000,,
802,802,0,0,,1,0,1,1,0,1,0,0,0,0,0,0,7,1,,0.060000,1,2015-08-05,2015-07-06,,2015-11-03,0,0,2015-08-05,1,1,,0,0,0,0,0,131,0,0,0,0,0,2014-08-10,10000000000000000000,,

a saída desejada se RS for "*" será semelhante a:

027,027,0,3,,1,0,1,1,0,0,0,0,0,0,0,0,6,1,,1.211100,1,2015-08-03,2015-07-04,,2015-11-01,0,0,2015-11-01,1,1,,0,0,0,0,0,131,0,0,0,0,0,2015-06-01,10000000000000000000,,
********************************************************************************************************************************************************************
136,136,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1,1,,0.350000,1,2015-08-17,2015-07-18,,2015-11-15,0,0,2015-11-15,0,0,,0,0,0,0,0,131,0,0,0,0,0,2012-11-20,10000000000000000000,,
*******************************************************************************************************************************************************************
633,633,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,3,1,,3.125300,1,2015-08-31,2015-08-01,,2015-11-29,0,0,2015-11-29,0,0,,0,0,0,0,0,131,0,0,0,0,0,2014-12-12,10000000000000000000,,
*******************************************************************************************************************************************************************
802,802,0,0,,1,0,1,1,0,1,0,0,0,0,0,0,7,1,,0.060000,1,2015-08-05,2015-07-06,,2015-11-03,0,0,2015-08-05,1,1,,0,0,0,0,0,131,0,0,0,0,0,2014-08-10,10000000000000000000,,
*******************************************************************************************************************************************************************

Eu tentei usar vários códigos fazendo {RS="*"} sem sucesso.

    
por Eng7 05.08.2015 / 08:18

1 resposta

4

Aqui está um método:

$ v='\n*******************************************************************************************************************************************************************\n'
$ awk -v ORS="$v" '{print;}' file
027,027,0,3,,1,0,1,1,0,0,0,0,0,0,0,0,6,1,,1.211100,1,2015-08-03,2015-07-04,,2015-11-01,0,0,2015-11-01,1,1,,0,0,0,0,0,131,0,0,0,0,0,2015-06-01,10000000000000000000,,
*******************************************************************************************************************************************************************
136,136,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1,1,,0.350000,1,2015-08-17,2015-07-18,,2015-11-15,0,0,2015-11-15,0,0,,0,0,0,0,0,131,0,0,0,0,0,2012-11-20,10000000000000000000,,
*******************************************************************************************************************************************************************
633,633,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,3,1,,3.125300,1,2015-08-31,2015-08-01,,2015-11-29,0,0,2015-11-29,0,0,,0,0,0,0,0,131,0,0,0,0,0,2014-12-12,10000000000000000000,,
*******************************************************************************************************************************************************************
802,802,0,0,,1,0,1,1,0,1,0,0,0,0,0,0,7,1,,0.060000,1,2015-08-05,2015-07-06,,2015-11-03,0,0,2015-08-05,1,1,,0,0,0,0,0,131,0,0,0,0,0,2014-08-10,10000000000000000000,,
*******************************************************************************************************************************************************************

Aqui está outro método para obter o mesmo efeito, mas sem definir explicitamente o ORS:

awk '{print;} {for(i=1;i<=length($0);i++)printf "*";print"";}' file
    
por 05.08.2015 / 08:27

Tags