【发布时间】:2013-03-15 23:45:32
【问题描述】:
我必须从一个大文件中提取一个特定的行(1500000 行),在多个文件的循环中多次,我在问自己最好的选择是什么 (在性能方面)。 有很多方法可以做到这一点,我主要使用这 2 个
cat ${file} | head -1
或
cat ${file} | sed -n '1p'
我找不到答案,他们是否都只获取第一行或两个(或两者)之一首先打开整个文件,然后获取第 1 行?
【问题讨论】:
-
使用
time测量命令。 -
为什么将
cat输入到工具中?他们都可以自己打开文件,如果您担心效率,他们可能会做得更好。但是,是的,管道应该只“流式传输”文件的前几个块(然后注意到消费者不再关心)。 -
顺便说一句,对于大文件中的特定行,使用提前编译语言的程序很可能比
head "-$pos" "$file" | tail -1运行得更快。 (像 C 一样,特别是使用 SIMD 内在函数来优化大内存块上换行符的计数,直到您接近正确的起始位置。如果在页面缓存中已经很热,它应该只在映射文件后受内存带宽的限制.)
标签: bash sed benchmarking head cat