El ejemplo a continuación me sorprendió. Parece ser contrario a la intuición ... aparte del hecho de que hay un bigote más tiempo de usuario para el echo | sedcombo.
¿Por qué está echousando tanto tiempo del sistema cuando se ejecuta solo, o debería ser la pregunta, ¿Cómo sedcambia el estado de juego? Parece que echotendría que hacer el mismo eco en ambos casos ...
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

time echo ... |cat >filee inclusotime echo ... |perl -ne 'print'son tiempos similares a lasedversión.Respuestas:
bahamat y Alan Curry tienen razón: esto se debe a la forma en que su shell amortigua la salida de
echo. Específicamente, su shell es bash y emite unawritellamada al sistema por línea. Por lo tanto, el primer fragmento realiza 1000000 escrituras en un archivo de disco, mientras que el segundo fragmento realiza 1000000 escrituras en una tubería y sed (en gran parte en paralelo, si tiene varias CPU) hace un número considerablemente menor de escrituras en un archivo de disco debido a su salida almacenamiento en búfer.Puedes observar lo que está sucediendo corriendo strace .
Otros shells como ksh amortiguan la salida
echoincluso cuando es multilínea, por lo que no verá mucha diferencia.Con bash obtengo proporciones de tiempo similares. Con ksh veo que el segundo fragmento se ejecuta más lentamente.
fuente
kshejemplo es más