Я хочу запустить команду cut, чтобы извлечь какой-либо столбец из большого файла и вставить его в другой файл:

Я хочу извлечь некоторые столбцы из файла и вставить в другой файл. В настоящее время я использую:

cat $Input_file | cut -f$Var_ColumnNo1,$Var_ColumnNo2,$Var_ColumnNo1 -d"," > $OUTPUT_file 

но эта команда занимает много времени на больших файлах (например, в файле размером 50 МБ, занимает примерно 2 секунды) и делает мои скрипты очень медленными, так как мне нужно многократно запускать эту операцию.

Есть ли эффективный метод для этого?

Не на самом деле нет. cut – это, безусловно, самый быстрый способ сделать это. Я протестировал некоторые альтернативы в файле 157M, и резка, безусловно, самая быстрая (кстати, вам здесь не нужна 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 

Если вы хотите ускорить работу, вам нужно будет изменить то, что делает ваш скрипт. Я предлагаю вам задать другой вопрос, включите пример вашего входного файла и объясните, какова ваша конечная цель. Если вам нужно выполнить эту операцию несколько раз, то вы почти наверняка делаете это неправильно. Ваш входной файл следует читать только один раз, когда это возможно.