Unix - Como anexar texto a cada linha de um arquivo, exceto para a linha de cabeçalho / primeira linha

4

Eu tenho um arquivo dizendo abc.txt com os seguintes dados (dados reais têm muitos registros, digamos, cerca de 200)

Sno | Name
1 | Jack
2 | Jill
3 | June

Agora, como eu adiciono texto para que meu arquivo fique assim,

Sno | Name | Place
1 | Jack | Paris
2 | Jill | Paris
3 | June | Paris

Eu tentei substituir globalmente, mas a primeira linha deve ser anexada com texto diferente. Por favor, ajude-me, rapazes.

    
por JK23 02.09.2013 / 15:28

2 respostas

7

Aqui estão três opções:

  • awk e suas variantes ( gawk , mawk etc.):

    awk '{if(NR==1){print $0,"| Place"} else{print $0,"| Paris"}}' file.txt
    
  • Perl:

    perl -lne '$.==1 ? print "$_ | Place" : print "$_ | Paris"' file.txt
    
  • sed

    sed '1 s/$/ | Place/; 1! s/$/ | Paris/' file.txt 
    
por 02.09.2013 / 15:43
0

Para edição de arquivo "no local" com script, use ex :

printf '%s\n' '1s/$/ | Place/' '2,$s/$/ | Paris/' x | ex abc.txt
  • printf fornece os comandos para ex .
  • 1s realiza o substituto apenas na primeira linha.
  • 2,$s realiza a substituição em todas as outras linhas.
  • x salva e sai.

O $ na expressão regular significa "fim de linha".

    
por 12.04.2016 / 06:15

Tags