ファイルからいくつかの列を抽出して別のファイルに貼り付けたいです。私は現在以下を使用しています:
cat $Input_file | cut -f$Var_ColumnNo1,$Var_ColumnNo2,$Var_ColumnNo1 -d"," > $OUTPUT_file
ただし、このコマンドは大容量ファイルに時間がかかり(たとえば、50 MBファイルの場合は約2秒かかります)、このコマンドを複数回実行する必要があるため、スクリプトが非常に遅くなります。
これを行う効率的な方法はありますか?
ベストアンサー1
正確ではありません。cut
これがほぼ確実に最速の方法です。私は157Mファイルでいくつかの選択肢をテストしましたが、cut
最も速いようです(ここでは必要ありませんcat
)。
$ time cut -f 2,6,8 -d ',' file > /dev/null
real 0m0.859s
user 0m0.803s
sys 0m0.053s
$ time awk -F, '{print $2,$6,$8}' file > /dev/null
real 0m5.442s
user 0m5.317s
sys 0m0.050s
$ time perl -F, -lane 'print "@F[1,5,7]"' file > /dev/null
real 0m6.065s
user 0m5.943s
sys 0m0.070s
作業を高速化するには、スクリプトが実行する操作を変更する必要があります。入力ファイルの例を含め、最終目標が何であるかを説明する他の質問をすることをお勧めします。 「このタスクを複数回実行する必要がある場合」は、ほぼ間違いなく間違ったタスクを実行しています。可能であれば、入力ファイルを一度だけ読み取る必要があります。