bash - 使用 GNU 并行读取文件
问题描述
我有一个如下所示的文件:
chr1 1 5 ID1 HK1
chr2 2 8 ID2 HK3
...
我想提取每个 ID 的所有行并将它们写入该 ID 的相应文件。以下代码工作得很好,但我想将它与 并行化GNU parallel
,因为只有一个内核(我有 72 个)太慢了:
while IFS= read -r line
do
a=$(echo "$line" | cut -f 4- | cut -f -1)
b=$(echo "$line" | cut -f -3)
echo $b >> "$a.bed"
done < "file"
我以前用 . 做过这个grep
,但由于某些文件的行数 >800M,这也太慢了。我将如何将其传递给GNU parallel
正确的方式?谢谢!
解决方案
原来GNU parallel
有一个选项可以逐行读取文件并将该行作为参数传递:parallel -a
. 我将代码更改为:
parallel -j 60 -a temp ./make_file.sh {}
推荐阅读
- python - ndb.put_multi 是原子的吗?
- c# - 如何解决一段音频后的调用导致音频延迟?
- android - 我想下载 jdk windows 32 位
- android - 如何在片段附加到活动之前执行后台任务?
- javascript - 如何使用 JavaScript 创建自定义弹出窗口
- jquery - 如何使用 jQuery 从 HTML 节点中选择文本内容?
- reactjs - 模型打开正在工作,但关闭功能在反应 js 中不起作用
- php - 发送包含来自表单输入和数据库数据的混合数据的电子邮件
- java - .class 文件是字节码吗?或 .class 文件是否包含字节码?
- node.js - 护照的身份验证功能如何知道要验证哪个请求?