Альтернативы для 'egrep -o & ldquo; success | error | fail & rdquo; & Lt; имя файла & GT; | сортировать | uniq -c '

Начиная с 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 года.
1
задан 17 September 2012 в 13:02

5 ответов

Нет, я думаю, что ты такой же хороший, как и он. Естественно, вы могли бы сделать это с помощью одного скрипта perl,

perl -nle  's/.*(error|fail|success).*/$1/ && $a{$_}++ ; END {  print "$_ $a{$_}" for keys %a } ' test.txt

... но он более сложный и менее интуитивный.

4
ответ дан 25 May 2018 в 06:26
  • 1
    Я добавил образец ввода к моему вопросу ... Надеюсь, что теперь более ясно, что команда делает ... sory за неудобства – Wolfy 17 September 2012 в 12:56
  • 2
    Хорошо, я изменил perl oneliner соответственно. Я все еще думаю, что ваше решение с egrep лучше и интуитивно понятное. – January 17 September 2012 в 13:00

Не намного короче, но поскольку вам действительно не нужно регулярное выражение, есть fgrep (grep -F).

fgrep 'success
error
fail' "$filename" | sort | uniq -c

другой способ написать одно и то же в bash: [ ! d1]

fgrep $'success\nerror\nfail' "$filename" | sort | uniq -c
2
ответ дан 25 May 2018 в 06:26

Вы можете написать простой скрипт bash, а затем вызвать скрипт, например:

#!/bin/bash
egrep -o "success|error|fail" "$1" | sort | uniq -c

и сохранить его как (например) myscript.sh. Затем сделайте chmod +x myscript.sh, и вы можете называть его как myscript.sh <filename>.

1
ответ дан 25 May 2018 в 06:26
  • 1
    Но в этом случае команда такая же ... вы просто создали скрипт, который вызывает команду ... – Wolfy 17 September 2012 в 11:58
  • 2
    Я думал, ты просто хотел ускорить работу журналов. Любопытно, почему вам нужна альтернативная команда, если тот, который вы уже предоставили, хорошо подходит для вас? – jeremija 17 September 2012 в 12:54
  • 3
    как я сказал: мне просто любопытно, как другие делают что-то подобное ... много раз я понял, что люди знают какой-то причудливый / хороший способ сделать что-то, и я люблю, чтобы узнать, как теперь можно делать что-то ... – Wolfy 17 September 2012 в 13:01
  • 4
    В этом случае вы являетесь этим человеком :-) Ваша командная строка хороша, точная, понятная и использует мощь командной строки Unix. Что еще можно пожелать? – January 17 September 2012 в 13:14

Ваша команда, хотя и короткая и сладкая, является довольно обходным способом подсчета вхождений термина. Я бы, вероятно, взял прямолинейный подход и использовал флаг -c grep (который делает именно это) внутри цикла оболочки:

for i in success test fail; do echo `grep -c $i <filename>` $i; done

Не так коротка, не так увлекательно, потенциально быстрее для больших logfiles (нет sort). Я бы сказал, что это стирка.

0
ответ дан 25 May 2018 в 06:26

Это может быть фиктивный ответ, но я думаю, что в этом случае sort совершенно бесполезен; возможно, вы можете опустить это. Тем не менее здесь мы используем три разные команды для трех разных действий.

Мы можем сократить ее, если некоторые из них будут достигнуты с некоторой опцией grep, но я не вижу, какой ...: )

-1
ответ дан 25 May 2018 в 06:26
  • 1
    Нет, это не так, иначе uniq будет считать только последовательные экземпляры поисковых терминов. Например. если у вас есть успех, успех, неудача, успех, то выход uniq будет 2 success 1 fail 1 success. – January 17 September 2012 в 13:03
  • 2
    это нормально ... sry – Alessio Tomelleri 17 September 2012 в 13:11

Другие вопросы по тегам:

Похожие вопросы: