Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 用于从文件中提取指定行的最快/最简洁的bash one liner_Perl_Bash_Sed_Awk_Grep - Fatal编程技术网

Perl 用于从文件中提取指定行的最快/最简洁的bash one liner

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

我只想从文件中提取具有特定行号的行(我有大约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
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