Самый быстрый / краткий bash-однострочный для извлечения указанных строк из файла - PullRequest
5 голосов
/ 11 мая 2011

Я хочу извлечь из файла только строки с конкретными номерами строк (у меня около 20-50 номеров строк, в файле 30000 строк).На данный момент самый краткий способ, который я нашел для этого, например:

gawk 'BEGIN {split("13193,15791,16891", A, ",")} NR in A' <file_name>

, но, похоже, я должен быть в состоянии еще больше уменьшить количество набираемых текстов.Я посмотрел на sed, но я думаю, что мне нужно -n и -p для каждого номера строки, также думал о cat -n с grep, но это более многословно, чем выше.Кто-нибудь знает лучший способ?

Ответы [ 3 ]

9 голосов
/ 11 мая 2011

Sed может быть более кратким:

sed -n "13193p;15791p;16891p" file_name
4 голосов
/ 11 мая 2011

Поместите список номеров строк в отдельный файл, затем

gawk 'FNR==NR {line[$1]; next} NR in line' line_numbers file_name
0 голосов
/ 16 марта 2012

Это может сработать для вас (GNU sed?):

sed 's/$/p/' file_of_line_numbers | sed -nf - source
...