Как я могу извлечь предопределенный диапазон строк из текстового файла в Unix?

Как Фейсал отмечает , вы могли бы сами декораторы приложить метаданные к функции, но, насколько мне известно, это не делается автоматически.

485
задан lesmana 9 December 2016 в 16:34
поделиться

11 ответов

sed -n '16224,16482p;16483q' filename > newfile

От sed руководство :

p - Распечатывают пространство шаблона (к стандартному выводу). Эта команда обычно используется только в сочетании с-n параметром командной строки.

n - Если автопечать не отключена, распечатайте пространство шаблона, то, независимо, заменяют пространство шаблона следующей строкой входа. Если там больше не вводится тогда sed, выходы, не обрабатывая больше управляет.

q - Выход sed, не обрабатывая больше управляет или вход. Обратите внимание, что текущее пространство шаблона печатается, если автопечать не отключена с-n опцией.

и

Адреса в sed сценарии могут быть в любой из следующих форм:

номер , Определяющий номер строки, будет соответствовать только что строка во входе.

диапазон адресов может быть определен путем определения двух адресов, разделенных запятой (). Диапазон адресов соответствует строкам, начинающим с того, где первый адрес соответствует и продолжается до вторых соответствий адреса (включительно).

727
ответ дан avandeursen 9 December 2016 в 16:34
поделиться

Я собирался отправить прием головы/хвоста, но на самом деле я, вероятно, просто разожгу emacs.;-)

  1. esc - x goto-строка мочат метку 16224
  2. ( ctrl - пространство )
  3. esc - x , goto-строка мочат 16482
  4. esc - w

открывает новый выходной файл, ctl-y сохраняют

, Позвольте нам меня, видят то, что происходит.

2
ответ дан guerda 9 December 2016 в 16:34
поделиться

Быстрый и грязный:

head -16428 < file.in | tail -259 > file.out

, Вероятно, не лучший способ сделать это, но это должно работать.

BTW: 259 = 16482-16224+1.

3
ответ дан jan.vdbergh 9 December 2016 в 16:34
поделиться
cat dump.txt | head -16224 | tail -258

должен добиться цели. Оборотная сторона этого подхода - то, что необходимо сделать арифметику, чтобы определить аргумент в пользу хвоста и составлять, хотите ли Вы 'между' включать конечную строку или нет.

5
ответ дан Jonathan Leffler 9 December 2016 в 16:34
поделиться

sed -n '16224,16482p' < dump.sql

5
ответ дан cubex 9 December 2016 в 16:34
поделиться
 # print section of file based on line numbers
 sed -n '16224 ,16482p'               # method 1
 sed '16224,16482!d'                 # method 2
8
ответ дан Cetra 9 December 2016 в 16:34
поделиться
perl -ne 'print if 16224..16482' file.txt > new_file.txt
17
ответ дан Jonathan Leffler 9 December 2016 в 16:34
поделиться

Вы могли использовать 'vi' и затем следующую команду:

:16224,16482w!/tmp/some-file

, Кроме того:

cat file | head -n 16482 | tail -n 258

РЕДАКТИРОВАНИЕ:-Только для добавления объяснения Вы используете , главный-n 16482 для отображения сначала 16 482 строк тогда использует хвост-n 258 для вытаскивания последних 258 строк из первого вывода.

28
ответ дан user2593869 9 December 2016 в 16:34
поделиться

Довольно простая голова/хвост использования:

head -16482 in.sql | tail -258 > out.sql

использование sed:

sed -n '16482,16482p' in.sql > out.sql

использование awk:

awk 'NR>=10&&NR<=20' in.sql > out.sql
83
ответ дан manveru 9 December 2016 в 16:34
поделиться
sed -n '16224,16482 p' orig-data-file > new-file

, Где 16224,16482 номер строки запуска и заканчивает номер строки, включительно. Это 1-индексируемо. -n подавляет повторение входа, как произведено, который Вы ясно не хотите; числа указывают на диапазон строк, чтобы заставить следующую команду воздействовать на; команда p распечатывает соответствующие строки.

198
ответ дан JXG 9 December 2016 в 16:34
поделиться

Используя редактора:

ed -s infile <<<'16224,16482p'

-s подавляет диагностический вывод; фактические команды в здесь-строке. А именно, 16224,16482p выполнения p (печать) команда на желаемом диапазоне адресов строки.

0
ответ дан 22 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: