gpt4 book ai didi

linux - 为什么使用 tail 复制文件比 cp 慢很多,而使用 awk 快两倍?

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:29 25 4
gpt4 key购买 nike

我正在尝试删除大型 csv 文件的标题行。但是与复制整个文件相比,我尝试的第一种方法(使用 tail 和 awk)工作起来太慢了!

所以,为了好玩,让我们尝试一些愚蠢但可能具有教学意义的复制文件的方法。

使用 cp:

$ time cp my_big_file.csv copy_of_my_big_file.csv

real 0m2.208s
user 0m0.002s
sys 0m2.171s

使用尾部:

$ time tail -n+1 my_big_file.csv > copy_of_my_big_file.csv

real 0m44.506s
user 0m37.521s
sys 0m3.107s

使用 awk:

$ time awk '{if (NR!=0) {print}}' my_big_file.csv > copy_of_my_big_file.csv

real 0m24.951s
user 0m20.336s
sys 0m2.869s

是什么导致使用 tail、cp 和 awk 之间存在如此大的差异?

最佳答案

cp 正在逐 block 复制 fs,而不问自己问题。大多数事情都发生在内核级别。

tail 逐行读取并进行一些过滤以逐行重新创建文件。当然,fs会在读写的情况下做buffer,但是效率比较低,因为要跨好几层(kernel-user space),来回

关于linux - 为什么使用 tail 复制文件比 cp 慢很多,而使用 awk 快两倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30228833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com