Comando nl: Numerando Linhas

Comando nl: Numerando Linhas

O Que Voce Vai Aprender

  • Como adicionar numeros de linha com o comando nl
  • A diferenca principal entre nl e cat -n (como tratam linhas em branco)
  • Como alterar a largura, separador, valor inicial, incremento e formato dos numeros
  • Como apontar rapidamente "qual linha" em um log ou arquivo fonte

Resumo Rapido

  • So precisa de numeros rapido -> nl file
  • Quer linhas em branco numeradas tambem -> nl -b a file
  • cat -n tambem numera toda linha (pratico quando nao precisa de opcoes)

1. O Que e o Comando nl?

Conclusao: nl (number lines) imprime cada linha do texto com um numero de linha na frente. Por padrao, ele pula linhas em branco.

Lina: Eu quero ler um arquivo sabendo "qual linha e qual." Preciso mesmo contar com o dedo?
Veterano Linny: Nao, o comando nl imprime o texto com numeros de linha para voce. nl significa "number lines."
Lina: Queria ter sabido antes. Como eu uso?
Veterano Linny: Basta passar o nome do arquivo: nl nomedoarquivo.

Vamos experimentar com um arquivo de tres linhas chamado memo.txt.

$ cat memo.txt
apple
orange
grape

Passe pelo nl e cada linha recebe um numero na frente.

$ nl memo.txt
     1	apple
     2	orange
     3	grape

Basico do nl

nl nomedoarquivo coloca um numero de linha alinhado a direita na frente de cada linha. O numero e o texto sao separados por uma tabulacao.

2. Como nl Difere de cat -n?

Conclusao: A grande diferenca sao as linhas em branco. Por padrao, nl nao numera linhas em branco, enquanto cat -n numera toda linha.

Lina: Mas cat -n tambem adiciona numeros de linha, certo? Qual e a diferenca?
Veterano Linny: Boa pergunta. A diferenca principal e como tratam linhas em branco. Vamos ver.

Aqui esta list.txt com linhas em branco no meio.

$ cat list.txt
red

blue

green

Execute nl e as linhas em branco nao recebem numero.

$ nl list.txt
     1	red

     2	blue

     3	green

cat -n, por outro lado, numera toda linha, incluindo as em branco.

$ cat -n list.txt
     1	red
     2
     3	blue
     4
     5	green

Qual usar

O que voce quer Comando
Numerar apenas linhas com conteudo nl file
Numerar toda linha fisica, incluindo em branco cat -n file
Controle fino sobre largura e formato nl (opcoes ricas)
Lina: Entao nl numera as linhas "significativas."
Veterano Linny: Isso. E como veremos, nl permite ajustar a largura e o separador, entao e otimo quando voce quer que a saida fique limpa.

3. Numerando Linhas em Branco Tambem: -b a

Conclusao: Adicione -b a para numerar toda linha, incluindo as em branco. -b define o estilo de numeracao do corpo.

Quando voce quer linhas em branco numeradas tambem, use -b a. O a significa "all" (todas as linhas).

$ nl -b a list.txt
     1	red
     2
     3	blue
     4
     5	green

Estilos principais de -b

  • -b a: numerar todas as linhas (all)
  • -b t: numerar apenas linhas nao vazias (padrao, t de text)
  • -b n: nao numerar nenhuma linha (none)
Lina: Como o padrao e -b t, linhas em branco sao puladas a menos que eu diga o contrario.
Veterano Linny: Exatamente. Quando voce quer tudo numerado, use -b a.

4. Formatando os Numeros: -w / -s

Conclusao: Use -w para a largura da coluna de numeros e -s para o separador entre numero e texto. Os padroes sao largura 6 e tabulacao.

4-1. Alterar a largura (-w)

Por padrao, a coluna de numeros tem seis caracteres de largura. -w define a largura.

$ nl -w 3 memo.txt
  1	apple
  2	orange
  3	grape

4-2. Alterar o separador (-s)

O numero e o texto sao separados por uma tabulacao por padrao. -s define qualquer string que voce quiser.

$ nl -s '. ' memo.txt
     1. apple
     2. orange
     3. grape
Lina: Com -s '. ' eu consigo "1. apple," como uma lista numerada.
Veterano Linny: Sim. O separador pode incluir espacos, entao combine -w e -s para construir uma lista limpa e legivel.

5. Valor Inicial e Incremento: -v / -i

Conclusao: -v define o numero inicial e -i define o incremento. Comece em 100, ou conte de 2 em 2, conforme necessario.

5-1. Alterar o valor inicial (-v)

-v e o primeiro numero. Para comecar em 100:

$ nl -v 100 memo.txt
   100	apple
   101	orange
   102	grape

5-2. Alterar o incremento (-i)

-i e quanto cada linha adiciona. Para contar de 2 em 2, use -i 2.

$ nl -i 2 memo.txt
     1	apple
     3	orange
     5	grape

-v e -i combinam: nl -v 10 -i 10 memo.txt numera 10, 20, 30.

6. Preenchimento com Zeros e Alinhamento: -n

Conclusao: -n define o formato do numero: rz para preenchimento com zeros, ln para alinhamento a esquerda, rn (padrao) para alinhamento a direita.

-n controla como o numero e exibido.

$ nl -n rz -w 3 memo.txt
001	apple
002	orange
003	grape

Valores de formato -n

Valor Significado
rn Alinhado a direita, sem preenchimento (padrao)
rz Alinhado a direita, com zeros
ln Alinhado a esquerda

7. Usando nl em um Pipe

Conclusao: Sem nome de arquivo, nl le a entrada padrao, entao voce pode redirecionar a saida de outro comando atraves dele para adicionar numeros de linha.

Omita o nome do arquivo e redirecione para nl para numerar a saida do comando anterior.

$ ls /etc | nl
     1	hostname
     2	hosts
     3	passwd
Lina: Agora posso dizer qual item e qual de relance.
Veterano Linny: Isso. Redirecionar resultados do grep para nl para contar "qual numero de correspondencia" tambem e um uso comum.

Se a entrada redirecionada contem linhas em branco, o padrao pula a numeracao delas. Para contar itens exatamente, adicione -b a ou use cat -n.

8. Mini Exercicios: Tente Voce Mesmo

Conclusao: Tres tarefas (criar um arquivo, numerar com linhas em branco, ajustar o formato) permitem praticar o basico do nl na pratica.

Lina: Quero aprender fazendo.
Veterano Linny: Otimo, tenho tres para voce. Primeiro, crie um arquivo de pratica.
Veterano Linny: printf 'a\n\nb\n\nc\n' > sample.txt

Tarefa 1: Imprima sample.txt com numeros de linha usando nl (linhas em branco podem ficar sem numero).

Mostrar dica

Basta passar o nome do arquivo: nl nomedoarquivo.

Resposta exemplo
$ nl sample.txt

Tarefa 2: Imprima o mesmo sample.txt com linhas em branco numeradas tambem.

Mostrar dica

Defina o estilo de numeracao do corpo para all com -b a.

Resposta exemplo
$ nl -b a sample.txt

Tarefa 3: Imprima sample.txt com numeros preenchidos com zeros de 3 digitos (001, 002, ...).

Mostrar dica

Combine o formato -n rz com a largura -w 3.

Resposta exemplo
$ nl -n rz -w 3 sample.txt

9. Templates para Copiar e Colar

Conclusao: Mantenha os padroes comuns a mao: basico, todas as linhas, formatacao e redirecionamento.

Padroes comuns para manter por perto

# Basico (numerar linhas nao vazias)
nl file.txt

# Numerar toda linha, incluindo em branco
nl -b a file.txt

# Largura 3, separador ponto
nl -w 3 -s '. ' file.txt

# Comecar em 100, incremento de 2
nl -v 100 -i 2 file.txt

# Preenchimento com zeros de 3 digitos
nl -n rz -w 3 file.txt

# Redirecionar saida de outro comando para nl
ls /etc | nl

Proximas Leituras