Инструмент на Bash за получаване на n-тия ред от файл

Има ли "каноничен" начин да се направи това? Използвах head -n | tail -1, което върши работа, но се чудех дали има инструмент на Bash, който специално извлича ред (или набор от редове) от файл.

Под "каноничен" имам предвид програма, чиято основна функция е да прави това.

Решение

head и тръба с tail ще бъдат бавни за огромен файл. Бих предложил sed по следния начин:

sed 'NUMq;d' file

Където NUM е номерът на реда, който искате да отпечатате; така например, sed '10q;d' file, за да отпечатате десетия ред на file.

Обяснение:

NUMq ще излезе веднага, когато номерът на реда е NUM.

d ще изтрие реда, вместо да го отпечата; това е забранено за последния ред, тъй като q кара останалата част от скрипта да бъде прескочена при прекратяване.

Ако имате NUM в променлива, ще трябва да използвате двойни кавички вместо единични:

sed "${NUM}q;d" file
Коментари (26)
sed -n '2p' < file.txt

ще отпечата втория ред

sed -n '2011p' < file.txt

2011-ти ред

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

от ред 10 до ред 33

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

1-ви и 3-ти ред

и така нататък...

За добавяне на редове със sed можете да проверите това:

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

Коментари (8)

За целта можете да използвате и Perl:

perl -wnl -e '$.== NUM && print && exit;' some.file
Коментари (0)