вот вы и замерьте. тогда поймёте, почему я вообще не мерил башевские конструкции - с моими наборами файлов это недели работы

Модераторы: /dev/random, Модераторы разделов
diesel писал(а): ↑20.01.2010 12:23ну я как бы подводил к мысли о том что для работы с файлами у которых есть некоторая разбивка на поля, с заданным разделителем, удобно, и как оказывается немного быстрее, использовать программы которые как раз таки умеют работать с файлами разбитыми на поля, а не матчать для этого регекспы. в конце-концов иногда нужно, например, выделить поле, потом проверить его на соответствие какому-нибудь условию, в случае соответствия сделать что-то одно, в случае несоответствия что-то другое. Подозреваю, что в том же sed'е это сделать можно, но синтаксически проще это написать в awk, и возможно получится быстрее.
Это как раз вопрос. Я не спорю, что cut только для простых случаев, но в простых случаях ему grep не нужен, и скорость будет существенно повыше, чем у sed. Да и насчёт того, что grep сравним по скорости с sed, я бы тоже так не торопился:
Shell
t:~$ for i in $(seq 10000); do cat /etc/passwd /etc/apt/preferences >>tmp/test; done
t:~$ wc -l tmp/test
650000 tmp/test
t:~$ time (grep : tmp/test | cut -d : -f 2- >/dev/null)
real 0m1.077s
user 0m0.960s
sys 0m0.084s
t:~$ time sed 's/:.*//' <tmp/test >/dev/null
real 0m6.770s
user 0m6.664s
sys 0m0.036s
t:~$ time sed '/^[^:]*$/ d; s/:.*//' <tmp/test >/dev/null
real 0m10.028s
user 0m9.937s
sys 0m0.024s
t:~$ time cut -sd : -f 2 <tmp/test >/dev/null
real 0m0.394s
user 0m0.364s
sys 0m0.016s
Shell
t:~$ time sed '/^[^:]*$/ d' <tmp/test >/dev/null
real 0m6.887s
user 0m6.732s
sys 0m0.040s
t:~$ time sed -n '/:/ p' <tmp/test >/dev/null
real 0m4.212s
user 0m4.100s
sys 0m0.020s
t:~$ time grep : <tmp/test >/dev/null
real 0m0.403s
user 0m0.380s
sys 0m0.004s