Начиная с 2011-01-18, Linux 2.6.38-rc1 включает упомянутый патч. См. Соответствующие новости Phoronix и сообщение Linus.
Начиная с 2011-01-29, Natty Narwhal ежедневно строит суда с Linux 2.6.38.
Итак, в настоящее время существуют два решения :
Получить последнее изображение Ubuntu 11.04. Или дождитесь последней официальной версии Ubuntu 11.04 в апреле 2011 года.Нет, я думаю, что ты такой же хороший, как и он. Естественно, вы могли бы сделать это с помощью одного скрипта perl,
perl -nle 's/.*(error|fail|success).*/$1/ && $a{$_}++ ; END { print "$_ $a{$_}" for keys %a } ' test.txt
... но он более сложный и менее интуитивный.
Не намного короче, но поскольку вам действительно не нужно регулярное выражение, есть fgrep (grep -F).
fgrep 'success
error
fail' "$filename" | sort | uniq -c
другой способ написать одно и то же в bash: [ ! d1]
fgrep $'success\nerror\nfail' "$filename" | sort | uniq -c
Вы можете написать простой скрипт bash, а затем вызвать скрипт, например:
#!/bin/bash
egrep -o "success|error|fail" "$1" | sort | uniq -c
и сохранить его как (например) myscript.sh. Затем сделайте chmod +x myscript.sh, и вы можете называть его как myscript.sh <filename>.
Ваша команда, хотя и короткая и сладкая, является довольно обходным способом подсчета вхождений термина. Я бы, вероятно, взял прямолинейный подход и использовал флаг -c grep (который делает именно это) внутри цикла оболочки:
for i in success test fail; do echo `grep -c $i <filename>` $i; done
Не так коротка, не так увлекательно, потенциально быстрее для больших logfiles (нет sort). Я бы сказал, что это стирка.
Это может быть фиктивный ответ, но я думаю, что в этом случае sort совершенно бесполезен; возможно, вы можете опустить это. Тем не менее здесь мы используем три разные команды для трех разных действий.
Мы можем сократить ее, если некоторые из них будут достигнуты с некоторой опцией grep, но я не вижу, какой ...: )