我想运行 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

如果您想加快速度,您将需要更改脚本正在执行的操作。我建议您问另一个问题,包括输入文件的示例并解释您的最终目标是什么。如果您“需要多次运行此操作”,那么您几乎肯定做错了。只要有可能,您的输入文件就应该只被读取一次。

相关内容