sed: substituindo a nova linha em uma determinada linha (ou última linha)

3

Eu tenho um arquivo como o seguinte:

a,b,c,d,e,f
1,2,3,4,5,6
7,8,9,0,1,2

Eu preciso juntar as duas últimas linhas com uma vírgula, assim:

a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2

O problema é que tudo isso está dentro de um loop que adicionará duas novas linhas ao arquivo, digamos

a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2
0,9,8,7,6,5
4,3,2,1,0,9

E agora eu preciso fazer o mesmo com essa última linha para o arquivo terminar como

a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2
0,9,8,7,6,5,4,3,2,1,0,9

Então, em poucas palavras, eu preciso substituir a última nova linha de um arquivo de texto com uma vírgula, mas apenas a última linha, conforme as linhas estão sendo adicionadas.

Eu tentei várias coisas, mas elas não funcionam. O último foi sed '$!N;s/\n/,/' dna.data , mas se aplica a todas as linhas com uma nova linha.

Alguma idéia?

    
por Dervin Thunk 25.01.2013 / 17:01

2 respostas

4

Se o arquivo não terminar com uma nova linha, você só precisa endereçar o último comando substituto (use o sinal -i de sed para alterar o arquivo no local):

$ sed '$!N;$s/\n/,/' dna.data
a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2
0,9,8,7,6,5,4,3,2,1,0,9  

Se o arquivo terminar com uma nova linha, você pode usar o editor ex :

$ ex dna.data
$-1s/\n/,/
1,2,3,4,5,6,7,8,9,0,1,2
x

ou em uma linha

echo -e '$-1s/\n/,/\nx' | ex dna.data
    
por 25.01.2013 / 18:45
2

Isso pode funcionar ou para você (GNU sed):

sed -i '$!N;$s/\n/,/;P;D' file
    
por 26.01.2013 / 15:35

Tags