尝试使用 GNU Parallel 和 sed

尝试使用 GNU Parallel 和 sed

为什么这一行什么都不做?我尝试并行运行“sed”命令,但它没有向“standard.txt”输出任何内容

$Filetemp = 我正在流编辑的文件

standard.txt = 我要输出到的文件

cat $Filetemp | parallel --pipe sed -e "s/[[:space:]]\+/ /g" > standard.txt

这是原始代码,运行正常但耗时太长:

sed -e "s/[[:space:]]\+/ /g" $Filetmp > standard.txt

GNU 并行版本:20130922

Lubuntu 14.04

答案1

当我在随机文件上运行该命令时,出现了语法问题。您需要引用该命令:

cat $Filetemp | parallel --pipe 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

如果这仍然不适合您,请测试echo $Filetemp(或手动选择文件)或删除重定向,以便您可以看到输出(以防出现某种奇怪的覆盖问题)。

答案2

自 20140422 版本以来,GNU Parallel 具有--pipepart以下高效功能:

parallel -a $Filetemp --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

从 20161222 版本开始,您可以使用--block -1它将每个作业槽切$Filetemp分为一个块:

parallel -a $Filetemp --block -1 --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

这可以为每个核心提供超过 1 GB/s 的速度,这意味着您的 I/O 可能会受到限制。您可以通过查看以下内容来了解​​是否是这种情况:

iostats -dkx 1

如果利用率是 100%,那么磁盘就是瓶颈。

相关内容