Existuje na to nejaký "kanonický" spôsob? Používal som head -n | tail -1
, ktorý to dokáže, ale zaujímalo by ma, či existuje nástroj Bash, ktorý konkrétne extrahuje riadok (alebo rozsah riadkov) zo súboru.
Pod pojmom "kanonický" mám na mysli program, ktorého hlavnou funkciou je robiť to.
head
a pipe s tail
bude pre obrovský súbor pomalý. Navrhoval by som sed
takto:
sed 'NUMq;d' file
Kde NUM
je číslo riadku, ktorý chcete vypísať; takže napríklad sed '10q;d' file
vypíše desiaty riadok zo file
.
Vysvetlenie:
NUMq
sa ukončí okamžite, keď je číslo riadku NUM
.
d
vymaže riadok namiesto toho, aby ho vypísal; to je zabránené na poslednom riadku, pretože q
spôsobí, že zvyšok skriptu sa pri ukončení preskočí.
Ak máte NUM
v premennej, budete chcieť použiť dvojité úvodzovky namiesto jednoduchých:
sed "${NUM}q;d" file
sed -n '2p' < file.txt
vypíše 2. riadok
sed -n '2011p' < file.txt
sed -n '10,33p' < file.txt
riadok 10 až riadok 33
sed -n '1p;3p' < file.txt
a tak ďalej...
Pre pridávanie riadkov pomocou sed môžete skontrolovať toto:
Môžete na to použiť aj Perl:
perl -wnl -e '$.== NUM && print && exit;' some.file