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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...