Ferramenta Bash para obter a enésima linha de um arquivo

Existe um "canónico" forma de o fazer? I'tem usado head -n | tail -1 que faz o truque, mas I'tem se perguntado se existe'é uma ferramenta Bash que especificamente extrai uma linha (ou um intervalo de linhas) de um arquivo.

Por "canonical" quero dizer um programa cuja função principal é fazer isso.

Solução

O "cabeça" e o "tubo com "cauda" serão lentos para um arquivo enorme. Eu sugeriria sed como este:

sed 'NUMq;d' file

Onde NUM é o número da linha que você quer imprimir; assim, por exemplo, sed '10q;d' file para imprimir a 10ª linha de file.

Explicação:

O NUMq desistirá imediatamente quando o número da linha for NUM.

O d' irá apagar a linha em vez de imprimi-la; isto é inibido na última linha porque oq' faz com que o resto do script seja pulado ao desistir.

Se você tiver NUM em uma variável, você vai querer utilizar aspas duplas em vez de simples:

sed "${NUM}q;d" file
Comentários (26)
sed -n '2p' < file.txt

irá imprimir a 2ª linha

sed -n '2011p' < file.txt

2011ª linha

sed -n '10,33p' < file.txt

linha 10 até a linha 33

sed -n '1p;3p' < file.txt

1ª e 3ª linha

e assim por diante...

Para adicionar linhas com sed, você pode verificar isso:

https://stackoverflow.com/q/15555781/#16246806

Comentários (8)

Você também pode usar o Perl para isso:

perl -wnl -e '$.== NUM && print && exit;' some.file
Comentários (0)