最快/最简洁的bash单行程序,用于从文件中提取特定行

时间:2011-05-11 09:11:55

标签: perl bash sed awk grep

我想从文件中提取具有特定行号的行(我有大约20-50行号,文件有30,000行)。到目前为止,我发现最简洁的方法就是这样:

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

但似乎我应该能够进一步减少所涉及的打字数量。我查看了sed,但我认为每个行号都需要-n-p,同时考虑cat -ngrep,但它更多比上面详细。有谁知道更好的方法吗?

3 个答案:

答案 0 :(得分:9)

Sed可以更简洁:

sed -n "13193p;15791p;16891p" file_name

答案 1 :(得分:4)

将行号列表放在单独的文件中,然后

gawk 'FNR==NR {line[$1]; next} NR in line' line_numbers file_name

答案 2 :(得分:0)

这可能适合你(GNU sed?):

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