Perl 用于从文件中提取指定行的最快/最简洁的bash one liner
我只想从文件中提取具有特定行号的行(我有大约20-50行行号,该文件有30000行)。到目前为止,我发现最简洁的方法是:Perl 用于从文件中提取指定行的最快/最简洁的bash one liner,perl,bash,sed,awk,grep,Perl,Bash,Sed,Awk,Grep,我只想从文件中提取具有特定行号的行(我有大约20-50行行号,该文件有30000行)。到目前为止,我发现最简洁的方法是: gawk 'BEGIN {split("13193,15791,16891", A, ",")} NR in A' <file_name> gawk'BEGIN{split(“131931579116891”,A,“,”)}NR在A' 但似乎我应该能够进一步减少打字量。我已经看过了sed,但是我想我需要一个-n和一个-p,对于每个行号,我也考虑了cat-n和g
gawk 'BEGIN {split("13193,15791,16891", A, ",")} NR in A' <file_name>
gawk'BEGIN{split(“131931579116891”,A,“,”)}NR在A'
但似乎我应该能够进一步减少打字量。我已经看过了
sed
,但是我想我需要一个-n
和一个-p
,对于每个行号,我也考虑了cat-n
和grep
,但是它比上面的更详细。有人知道更好的方法吗?Sed可以更简洁:
sed -n "13193p;15791p;16891p" file_name
将行号列表放在单独的文件中,然后
gawk 'FNR==NR {line[$1]; next} NR in line' line_numbers file_name
这可能适合您(GNU sed?):
您真的在命令行参数中键入了20-50行数字吗?不是手动!我从另一个程序中粘贴了它们,所以键入的数量只是一个函数,该函数用于让bash将数字识别为文件中的行号。。。笨重的我想我个人更喜欢将它们粘贴到一个文件中。一个很短的perl脚本就可以帮你完成这个任务。谢谢,这正是我想要的。我需要温习一下我的sed技能。
sed 's/$/p/' file_of_line_numbers | sed -nf - source