cutコマンドを実行して大きなファイルから特定の列を抽出し、それを別のファイルに貼り付けたいと思います。

cutコマンドを実行して大きなファイルから特定の列を抽出し、それを別のファイルに貼り付けたいと思います。

ファイルからいくつかの列を抽出して別のファイルに貼り付けたいです。私は現在以下を使用しています:

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

作業を高速化するには、スクリプトが実行する操作を変更する必要があります。入力ファイルの例を含め、最終目標が何であるかを説明する他の質問をすることをお勧めします。 「このタスクを複数回実行する必要がある場合」は、ほぼ間違いなく間違ったタスクを実行しています。可能であれば、入力ファイルを一度だけ読み取る必要があります。

おすすめ記事