Awk / sed: adicione números de linha ao texto de um intervalo

1

Então eu tenho um intervalo, digamos 2-4. E eu tenho três linhas:

first
second
third

Eu preciso que minha saída seja:

2 first
3 second
4 third

Estou tentando isso no BSD (Mac) awk / sed, o que parece estar dificultando isso.

    
por Charles 25.05.2016 / 20:04

3 respostas

3

nl é idealmente adequado:

nl -v2 -p -ba

começará a contar a partir de 2 ( -v2 ), ignorando alterações de página ( -p ) e numerando todas as linhas ( -ba ).

    
por 25.05.2016 / 20:35
1

POSIXLY:

awk '{printf("%s %s\n", FNR+1, $0)}' file

Se você quiser passar o parâmetro:

awk -vn=2 '{printf "%s %s\n", n++, $0}' <file

Se você deseja que apenas o intervalo seja produzido caso o arquivo seja maior que o intervalo:

awk -v s=2 -v e=4 'BEGIN{for(n=s;n<=e;n++)print n}' | paste -d' ' - file
    
por 25.05.2016 / 20:07
1

Com script bash puro?

i=2; cat output.txt | while IFS= read -r line; do
    echo "$i $line"
    i=$((i+1))
done
    
por 25.05.2016 / 20:15

Tags