Има ли "каноничен" начин да се направи това? Използвах 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
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 можете да проверите това:
За целта можете да използвате и Perl:
perl -wnl -e '$.== NUM && print && exit;' some.file