根据其他文件中的索引从文件中打印行

时间:2015-11-07 11:54:10

标签: awk sed

我有一个包含20000行的文件(myFile)和另一个文件(myIndex),其中包含必须从myFile中提取的行:

 4
 10
 1200
 ..
 ..

我想用sed提取这些行:

sed '10!d' myFile

如何将文件名替换为4,10,如下所示:

sed 'myIndex!d' myFile

或者awk中有类似的功能吗?

2 个答案:

答案 0 :(得分:1)

尝试使用GNU sed:

sed -nf <(sed 's/.*/&p/' myIndex) myFile

-n:禁止自动打印图案空间

-f:将脚本文件的内容添加到要执行的命令

<(...):bash&#39; Process Substitution

答案 1 :(得分:1)

您可以使用awk:

awk 'NR==FNR{i[$0];next}i[FNR]' index file
只要我们在NR==FNR时阅读第一个内容,

index就成立了。我们将所有行号存储在数组i中。在剩余的输入中,我们检查行号是否存储在i中。如果是这样,awk会打印该行。