Existe um comando que gera um arquivo de numeração de linha iniciando a numeração em uma linha específica?

2

cat -n file outputs file com numeração de linha, mas como posso especificar em qual linha iniciar a numeração? Existe um comando que pode fazer isso?

Pensei em talvez dividir o processo em alguns comandos. Se eu quiser começar a numeração de linha na linha N do arquivo de texto file.txt , então:

  1. Imprimir as primeiras linhas N-1 , à head -$((N-1)) file.txt
  2. Imprimir as restantes N linhas, numeradas: tail -n N file.txt | cat -n

Mas o segundo passo não é possível se a entrada for de stdin ; o primeiro passo terá consumido tudo isso. Eu teria que criar algum arquivo temporário para ler e depois removê-lo, AFAIK.

    
por ladaghini 15.11.2011 / 08:38

1 resposta

3

Você pode usar o awk para fazer isso:

awk 'NR >= n { printf("%6d  ", NR-n+1) } 1' n=3

Para as linhas em que o número do registro atual (NR) é maior ou igual a n (passado como uma variável), imprima um prefixo de linha, começando em 1. O 1 no final é awk curto-mão para imprimindo a linha atual.

Você também pode usar head(1) , pois ele pára de consumir a entrada quando lê o número de linhas necessárias:

{ head -$((N-1)); cat -n; }

Você pode canalizar para isso ou redirecionar um arquivo:

cat foo | { head -$((N-1)); cat -n; }
{ head -$((N-1)); cat -n; } < foo
    
por 15.11.2011 / 08:57