我想从文件中提取一些列并粘贴到另一个文件。我目前正在使用:
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
如果您想加快速度,您将需要更改脚本正在执行的操作。我建议您问另一个问题,包括输入文件的示例并解释您的最终目标是什么。如果您“需要多次运行此操作”,那么您几乎肯定做错了。只要有可能,您的输入文件就应该只被读取一次。