Чтение строк между двумя строками, указанными их номером строки

Как я буду читать все строки между двумя конкретными строками?

Давайте скажем, что строка 23 - это то, где я хочу начать, а строка 56 - последняя строка для чтения, но это не конец файла.

Как я буду читать строки с 23 по 56? Я буду выводить их в другой файл.

Ответ 1

С номером строки, как это довольно легко, с помощью awk:

awk 'NR >= 23 && NR <= 56'

И в любом случае sed делает его забавным.

sed '23,56!d'

Или для шаблона

sed '/start/,/end/!d'

Ответ 2

Sed может это сделать:

$ sed -n 23,56p yourfile

EDIT: поскольку комментаторы указали, что обработка sed останавливается после того, как последняя строка интервала заставит sed выполнить так же быстро, как комбинация головного хвоста. Таким образом, наиболее оптимальным способом получения строк будет

$ sed -n '23,56p;57q' yourfile

Но производительность будет сильно зависеть от обрабатываемого файла, интервала и множества других факторов. Поэтому, если вы разрабатываете некоторые script для частого использования при проверке известных данных, все три метода, упомянутые в ответах (sed, awk, head-tail), будут хорошей идеей.

Ответ 3

Я бы пошел на sed, но комбинация голов/хвост также возможна:

head -n 56 file | tail -n $((56-23)) 

Забастовкa >

Ну, я уверен, что внутри внутри есть ошибка. Я его найду.:)

Обновление:

Ха-ха - знаю свои ошибки, я нашел его:

head -n 56 file | tail -n $((56-23+1)) 

Ответ 4

использовать sed. Это должно сделать это.

   sed -n '23,56p' > out.txt

Ответ 5

Это может сработать для вас:

sed '1,22d;56q' file

или это:

sed '23,56!d;56q' file

или это:

awk 'NR>56{exit};NR==23,NR==56' file