Получить ряд строк из файла с учетом номеров начальной и конечной строк
Мне нужно извлечь заданное количество строк из файла с указанием номера начальной строки и конечной строки.
Как я мог быстро сделать это в unix (это на самом деле Solaris, поэтому гну-вкус недоступен).
спасибо
Ответы
Ответ 1
Для печати строк 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
Ответ 2
Я написал программу Haskell под названием splitter, которая делает именно это: прочитайте мой пост в блоге.
Вы можете использовать программу следующим образом:
$ cat somefile | splitter 4,6-10,50-
Это получит линии четыре, шесть-десять и строки пятьдесят и далее. И это все, что есть. Вам понадобится Haskell, чтобы установить его. Просто:
$ cabal install splitter
И все готово. Я надеюсь, что вы найдете эту программу полезной.
Ответ 3
вы также можете сделать это с помощью nawk
#!/bin/sh
start=10
end=20
nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file
Ответ 4
или
head -n "$last" file | tail -n +"$first"