下面的例子令我惊讶。这似乎是反直观的……除了事实之外,该组合还有更多的用户时间echo | sed
。
为什么单独运行时会花费echo
那么多系统时间,或者问题应该是,如何sed
改变游戏状态?似乎在两种情况下echo
都需要执行相同的回显 ...
time echo -n a\ {1..1000000}\ c$'\n' >file
# real 0m9.481s
# user 0m5.304s
# sys 0m4.172s
time echo -n a\ {1..1000000}\ c$'\n' |sed s/^\ // >file
# real 0m5.955s
# user 0m5.488s
# sys 0m1.580s
1
我的直觉反应是它与缓冲有关。
—
bahamat 2012年
@bahamat我认为你是对的。echo对每个参数执行单独的write()。sed缓冲它们。因此,第一个版本通过文件系统驱动程序进入块设备层时,对常规文件的写入量为100万次,而第二个版本中,通过管道的写入量为100万次,而通过较昂贵的内核代码层的写入量则较少。
—
艾伦·库里
@bahamat绝对缓冲。
—
StarNamer 2012年
time echo ... |cat >file
甚至time echo ... |perl -ne 'print'
与sed
版本相似。
感谢大家的良好解释...因此,对于大型多行书写(以bash表示),cat获得了Cat点的有用用法:)
—
Peter.O 2012年