Adiciona coluna ao arquivo de texto onde o valor é o número da linha?

4

Como eu adiciono uma coluna a um arquivo de texto, onde o valor é o número da linha?

Arquivo antes:

Foo Ba Lk Q
Lorem ipsum doler

Arquivo após

1 Foo Ba Lk Q
2 Lorem ipsum doler

etc

    
por user3761308 13.03.2017 / 17:54

2 respostas

7

Algumas abordagens diferentes:

  1. cat

    $ cat -n file
        1   Foo Ba Lk Q
        2   Lorem ipsum doler
    
  2. Perl

    perl -pe 's/^/$. /' file
    

    O -pe significa "imprimir cada linha de entrada depois de aplicar o script dado por -e a ele". Em seguida, substituímos ^ (o início da linha) pelo número da linha ( $. ) e um espaço.

    Como alternativa, pois este é Perl e TIMTOWTDI :

    perl -ne 'print "$. $_"' file 
    perl -pe '$_ = "$. $_"' file 
    

    Em todos esses exemplos, se você quiser modificar o arquivo original, use -i :

    perl -i -pe 's/^/$. /' file
    perl -i -ne 'print "$. $_"' file 
    perl -i -pe '$_ = "$. $_"' file 
    
  3. awk

    $ awk '{print NR,$0}' file
    1 Foo Ba Lk Q
    2 Lorem ipsum doler
    

    A variável especial NR é o número da linha atual e $0 da linha atual. Para fazer a mudança no arquivo original (supondo que você tenha uma versão recente suficiente do GNU awk), faça:

    gawk -iinplace '{print NR,$0}' file
    
  4. sed

    $ sed = file | sed 'N;s/\n/\t/'
    1   Foo Ba Lk Q
    2   Lorem ipsum doler
    

    O = significa "imprimir o número da linha antes de cada linha". No entanto, isso imprime o número em uma linha sozinho e a linha de entrada sob isso. O segundo comando sed os coloca novamente na mesma linha.

por terdon 13.03.2017 / 18:13
4

Apenas por diversão

python3 -c "[print(i+1, l.strip())for i, l in enumerate(open('f').readlines())]"

Saída:

1 Foo Ba Lk Q
2 Lorem ipsum doler

Onde f é o caminho para o seu arquivo, entre aspas.

Explicação

open('f').readlines()

lerá o arquivo, em linhas e

enumerate(open('f').readlines())

subseqüentemente adicionará um número a cada uma das linhas, e

print(i+1, l.strip())

imprime o número (+1, já que o primeiro índice é 0) + a linha correspondente

    
por Jacob Vlijm 13.03.2017 / 20:30