为什么这一行什么都不做?我尝试并行运行“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%,那么磁盘就是瓶颈。