Получить диапазон строк из файла с учетом номеров начальной и конечной строк - PullRequest
17 голосов
/ 10 февраля 2010

Мне нужно извлечь из файла заданное количество строк, учитывая номер начальной и конечной строк.

Как я могу быстро сделать это под Unix (на самом деле это Solaris, поэтому вкус gnu недоступен).

Thx

Ответы [ 4 ]

44 голосов
/ 10 февраля 2010

Для печати строк 6-10:

sed -n '6,10p' file

Если файл огромен, а номер конечной строки мал по сравнению с количеством строк, вы можете сделать его более эффективным:

sed -n '10q;6,10p' file

Из тестирования файла с довольно большим количеством строк:

$ wc -l test.txt 
368048 test.txt
$ du -k test.txt 
24640    test.txt
$ time sed -n '10q;6,10p' test.txt >/dev/null
real   0m0.005s
user   0m0.001s
sys    0m0.003s
$ time sed -n '6,10p' test.txt >/dev/null
real   0m0.123s
user   0m0.092s
sys    0m0.030s
1 голос
/ 26 июля 2013

Я написал программу на Haskell под названием splitter , которая делает именно это: прочитайте в моем выпуске блога .

Вы можете использовать программу следующим образом:

$ cat somefile | splitter 4,6-10,50-

Это получит строки четыре, шесть-десять и строки пятьдесят вперед. И это все, что нужно сделать. Вам понадобится Haskell для его установки. Просто:

$ cabal install splitter

И все готово. Я надеюсь, что вы найдете эту программу полезной.

0 голосов
/ 21 февраля 2010

Или

head -n "$last" file | tail -n +"$first"
0 голосов
/ 10 февраля 2010

вы можете сделать это и с nawk

#!/bin/sh
start=10
end=20
nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...