Como numerar uma string em cada linha de um arquivo

1

Dado file.txt que se parece com isto:

line_ some text
line_ some text
line_ some text

Como posso numerar as linhas assim com o Bash:

line_1 some text
line_2 some text
line_3 some text

Aqui está a minha ideia até agora, mas não funciona:

#!/bin/bash
var = 1
cat ./file.txt
while read line; do           
  sed "s/line_/line_(( var++ ))/"
done < ./file.txt 
    
por Sco 30.07.2015 / 20:08

4 respostas

3

Você pode usar o awk:

awk '$1=$1 FNR' <file>

$1 é a primeira palavra de cada registro (linha neste caso). FNR é o número do registro de entrada (número da linha, neste caso).

Este comando está substituindo o first word de cada linha pelo first word + line-number de cada linha.

    
por 30.07.2015 / 20:16
0

Veja como fazer isso em perl:

perl -pe 'print "line_$.  $_";'  [file(s)]

Se você quiser enviá-lo para um arquivo:

perl -pe 'print "line_$.  $_";'  [input_file] > [output_file]
    
por 30.07.2015 / 20:22
0

Parece-me que você está bem coberto aqui, mas que diabos:

sed -et -e's/_ /\n/;P;=;D' <in | paste -'d_ ' - - -  >out

sed não é exatamente um gênio no departamento de matemática, mas às vezes os amigos o ajudam a trapacear, e assim fica por aqui.

Isso transforma ...

line_ some text
line_ some text
line_ some text

... para ...

line_1 some text
line_2 some text
line_3 some text
    
por 01.08.2015 / 03:08
-1

Bem, você é bastante novo no Shell / Bash, por razões educacionais, aqui está uma solução para você, que cobre a sua tecnologia de escolha ( link , link )

var=1
while read -r Line; do 
  printf "%s\n" "${Line/line_/line_$var}" >> ./file-new.txt
  let var++
done < ./file.txt
    
por 01.08.2015 / 04:23