我正在寻找一种基于从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
问题是这很慢,我试图为大量相当大的文件做这件事。我希望有人能够建议更快的方式。
感谢您的帮助。
答案 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