сценарий оболочки + сопоставить слова ошибок в файле журнала - PullRequest
1 голос
/ 31 января 2012

, пожалуйста, посоветуйте, как сопоставить строки ERROR, которые появляются только после символа "]" от awk или sed

   [Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found 

Моя цель - подсчитать все слова ERROR, которые появляются только после символа "]"файл журнала

примечание - между «]» и ОШИБКОЙ должен быть один пробел или более

Ответы [ 5 ]

4 голосов
/ 31 января 2012

Моя цель - подсчитать все слова ОШИБКИ, которые появляются только после "]" символ в лог-файле

примечание - между «]» и ОШИБКОЙ должен быть один пробел или более

тогда вам не нужны такие ядерные головы, как awk, sed даже perl. grep делает это для вас так:

 grep -Pc ']\s+ERROR' yourLogFile

маленький тест:

kent$  echo "[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found "|grep -Pc ']\s+ERROR'
1
0 голосов
/ 31 января 2012

Это может работать для вас:

grep -c '\] \+ERROR' file

или

grep -c '\][[:space:]]\+ERROR' file

Или

sed '/\]\s\+ERROR/!d' file | wc -l
0 голосов
/ 31 января 2012

Здесь приведен фрагмент только оболочки, который должен работать быстрее, чем любые внешние программы (для чтения небольших файлов), поскольку он использует только встроенные функции оболочки. Его можно модифицировать для обработки ошибок в каждом конкретном случае во время работы в режиме демона (путем привязки файла журнала к fifo вместо непосредственного чтения и изменения условных выражений)

не предназначено для использования эха, но оно делает сокращение пробелов / табуляции до 1 пробела

FILE="logfile"
ERRORS=0
while read LINE || [ "$LINE" ]; do
    case "`echo $LINE`" in
        *\]" "ERROR*)ERRORS=$(($ERRORS+1));;
    esac
done < "${FILE}"
echo $ERRORS
0 голосов
/ 31 января 2012

AWK:

awk -F"] " '/ERROR/{print $2}' inputfile

Тест:

[jaypal:~] echo "[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found " | awk -F"] " '/ERROR/{print $2}'
ERROR file /etc/ghy.txt not found 

Perl:

perl -pe 's/.*(?<=] )(.*)/$1/' inputfile

Тест:

echo "[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found " | perl -pe 's/.*(?<=] )(.*)/$1/'
ERROR file /etc/ghy.txt not found 

Количество нет. вхождений:

[jaypal:~/Temp] cat file
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found

[jaypal:~/Temp] awk -F"] " '/ERROR/{a[NR]=$2}END{print "count is " length(a)}' file
count is 9
0 голосов
/ 31 января 2012

Вы можете сделать

sed -n '/] ERROR/p' infile
...