mesclar linhas em linhas personalizadas [closed]

0

Entrada:

ID   Name   NUMBER

1ABC234)234-2345,

2CBF23588900,

3knl334235354,

4gkmnk436563654,

Saída desejada:

    *ID   Name   NUMBER            ID   Name   NUMBER       ID   Name   NUMBER*
LINE--1    1ABC234)234-2345,2CBF23588900,3knl334235354,
LINE--2    4gkmn436563654,5JNKN53546536,6jknk5643545645,
LINE--3    7........,8..........,9............,
LINE--4    10.........,11.......,12...........

Eu tentei usar este comando, mas infelizmente ele me dá tudo em uma única linha

tr -d '\n'<sample.txt

Mas eu preciso gerar o arquivo exatamente como eu disse acima com o comando unix.

    
por Kiran 12.09.2017 / 15:27

1 resposta

1

Supondo que você gostaria de mesclar as linhas é de tal forma que cada nova linha contenha três das linhas do arquivo de entrada e que você deseja manter o mesmo cabeçalho:

$ ( head -n 1 file; sed '1d' file | paste -d '
ID   Name   NUMBER
1ABC234)234-2345,
2CBF23588900,
3knl334235354,
4gkmnk436563654,
line5,
line6,
line7,
line8,
line9,
' - - - ) >newfile $ cat newfile ID Name NUMBER 1ABC234)234-2345,2CBF23588900,3knl334235354, 4gkmnk436563654,line5,line6, line7,line8,line9,

O arquivo de entrada que usei era

$ ( head -n 1 file; sed '1d' file | paste -d '
$ ( head -n 1 file; sed '1d' file | paste -d '
ID   Name   NUMBER
1ABC234)234-2345,
2CBF23588900,
3knl334235354,
4gkmnk436563654,
line5,
line6,
line7,
line8,
line9,
' - - - ) >newfile $ cat newfile ID Name NUMBER 1ABC234)234-2345,2CBF23588900,3knl334235354, 4gkmnk436563654,line5,line6, line7,line8,line9,
' - - - | awk '{ print "LINE--" NR, $0 }') >newfile $ cat newfile ID Name NUMBER LINE--1 1ABC234)234-2345,2CBF23588900,3knl334235354, LINE--2 4gkmnk436563654,line5,line6, LINE--3 line7,line8,

O comando head simplesmente exibe o cabeçalho do arquivo, enquanto o sed e paste pipeline distribui as linhas restantes em grupos de três sem inserir nenhum delimitador. A saída de head e do pipeline é redirecionada para um novo arquivo.

Se você precisar do cabeçalho específico mencionado, basta substituir o comando head completo por echo 'insert header text here' .

Se você precisar de LINE--1 etc. para cada linha, passe o resultado de paste a awk '{ print "LINE--" NR, $0 }' :

$ ( head -n 1 file; sed '1d' file | paste -d '%pre%' - - - | awk '{ print "LINE--" NR, $0 }') >newfile    
$ cat newfile
ID   Name   NUMBER
LINE--1 1ABC234)234-2345,2CBF23588900,3knl334235354,
LINE--2 4gkmnk436563654,line5,line6,
LINE--3 line7,line8,
    
por 12.09.2017 / 15:55