【发布时间】:2018-02-23 22:11:50
【问题描述】:
我正在寻找一种基于 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
问题是这非常慢,我正在尝试对大量相当大的文件执行此操作。我希望有人可以提出更快的方法。
感谢您的帮助。
【问题讨论】:
-
请在您的帖子中的代码标签中发布示例 Input_file 和预期的输出文件。
-
您应该一次性执行提取,而不是将您的
awk调用包装在while循环中 -
@Aserre,我认为你是对的,问题是我一直将同一个文件加载到内存中。我是 awk 的新手,我不确定如何在一个 awk 步骤中做到这一点。请您详细说明一下吗?