Ответ 1
С номером строки, как это довольно легко, с помощью awk
:
awk 'NR >= 23 && NR <= 56'
И в любом случае sed
делает его забавным.
sed '23,56!d'
Или для шаблона
sed '/start/,/end/!d'
Как я буду читать все строки между двумя конкретными строками?
Давайте скажем, что строка 23 - это то, где я хочу начать, а строка 56 - последняя строка для чтения, но это не конец файла.
Как я буду читать строки с 23 по 56? Я буду выводить их в другой файл.
С номером строки, как это довольно легко, с помощью awk
:
awk 'NR >= 23 && NR <= 56'
И в любом случае sed
делает его забавным.
sed '23,56!d'
Или для шаблона
sed '/start/,/end/!d'
Sed может это сделать:
$ sed -n 23,56p yourfile
EDIT: поскольку комментаторы указали, что обработка sed останавливается после того, как последняя строка интервала заставит sed выполнить так же быстро, как комбинация головного хвоста. Таким образом, наиболее оптимальным способом получения строк будет
$ sed -n '23,56p;57q' yourfile
Но производительность будет сильно зависеть от обрабатываемого файла, интервала и множества других факторов. Поэтому, если вы разрабатываете некоторые script для частого использования при проверке известных данных, все три метода, упомянутые в ответах (sed, awk, head-tail), будут хорошей идеей.
Я бы пошел на sed, но комбинация голов/хвост также возможна:
head -n 56 file | tail -n $((56-23))
Забастовкa >
Ну, я уверен, что внутри внутри есть ошибка. Я его найду.:)
Ха-ха - знаю свои ошибки, я нашел его:
head -n 56 file | tail -n $((56-23+1))
использовать sed. Это должно сделать это.
sed -n '23,56p' > out.txt
Это может сработать для вас:
sed '1,22d;56q' file
или это:
sed '23,56!d;56q' file
или это:
awk 'NR>56{exit};NR==23,NR==56' file