我正在寻找一种基于从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
问题是这非常缓慢,我正在尝试对大量相当大的文件执行此操作.我希望有人能够提出更快的建议.
谢谢您的帮助.
解决方法:
用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。