微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-根据行号快速提取行

我正在寻找一种基于从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 举报,一经查实,本站将立刻删除。

相关推荐