【发布时间】:2015-04-19 22:46:17
【问题描述】:
我对 GNU Parallel 如何处理输入到 sed 就地文件编辑的管道输入感到困惑,我想了解它在做什么(同时也让我可以让它工作!)。
我有两个文件 f1 和 f2,如下所示:
f1
a11 a12 a13
a21 a22 a23
...
an1 an2 an3
f2
a41
stuff
...
a91
stuff
...
我要做的是将第二和第三列中的元素从 f1 连接到 f2 中存在的每个对应元素(第一列),这样 f2 看起来像:
a41 a42 a43
stuff
...
a91 a92 a93
things
...
一个简单的while循环就可以完成这项工作:
while IFS=$'\t' read -r e1 e2 e3; do sed -i "s/$e1/& $e2 $e3/g" f2 ; done < f1
我尝试像这样使用 GNU Parallel 复制它:
cat f1 | parallel --colsep '\t' -q sed -i "s/{1}/& {2} {3}/g" f2
与 while 循环相比,它仅修改了 f2 中的一小部分条目。它看起来像这样:
a41 a42 a43
stuff
...
a91
things
...
a71 a72 a73
words
...
那么,对于正在发生的事情以及如何使用 GNU Parallel 复制 while 循环行为有什么想法吗?
谢谢!
【问题讨论】:
-
您希望多个并行
seds 就地修改单个文件?
标签: bash sed while-loop parallel-processing gnu-parallel