web-dev-qa-db-ja.com

sedでGNU Parallelを使用しようとしています

なぜこの行は何もしないのですか? 「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

6
Roboman1723

ランダムファイルで実行すると、構文の問題が発生しました。コマンドを引用する必要があります:

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

それでもうまくいかない場合は、echo $Filetempをテストする(または手動でファイルを選択する)か、リダイレクトを削除して、出力が発生するのを確認します(何らかの奇妙な上書きの問題がある場合)。

5
Oli

バージョン20140422以降、GNU Parallelには--pipepartがあり、非常に効率的です。

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

また、バージョン20161222から--block -1を使用して、$Filetempをジョブスロットごとに1つのブロックに分割できます。

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

これにより、各コアで1 GB /秒以上を提供できるため、I/Oによって制限される可能性があります。これを確認するには、次のケースをご覧ください。

iostats -dkx 1

使用率が100%の場合、ディスクがボトルネックです。

0
Ole Tange