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.
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 o
q' 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
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:
Você também pode usar o Perl para isso:
perl -wnl -e '$.== NUM && print && exit;' some.file