根据行号快速提取行

时间:2018-02-23 13:59:49

标签: linux bash awk

我正在寻找一种基于从bash中的不同文件读取的行号列表来提取文件行的​​快速方法。

定义三个文件:

position_file:包含一列整数

full_data_file:包含一列数据

extracted_data_file:包含full_data_file中的行号,其行号与position_file中的整数相匹配

我目前的做法是

while read position; do
    awk -v pos="$position" 'NR==pos {print; exit}' < full_data_file >> extracted_data_file
done < position_file

问题是这很慢,我试图为大量相当大的文件做这件事。我希望有人能够建议更快的方式。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

使用 awk 命令的正确方法:

输入文件:

$ head pos.txt data.txt
==> pos.txt <==
2
4
6
8
10

==> data.txt <==
a
b
c
d
e
f
g
h
i
j
awk 'NR==FNR{ a[$1]; next }FNR in a' pos.txt data.txt > result.txt
$ cat result.txt
b
d
f
h
j