Извлечение запросов от файла журнала, которые не включают запрещенные строки

Это похоже на ошибку в Вашей сборке/версии coreutils. Я могу воспроизвести это на Сурикате Индивидуалиста Ubuntu 10.10, но не на Fedora 15.

[patches@holocene ~]$ cat /etc/fedora-release 
Fedora release 15 (Lovelock)
[patches@holocene ~]$ rpm -q coreutils
coreutils-8.10-2.fc15.x86_64
[patches@holocene ~]$ echo 哈哈 | cut -c 2-
哈
[patches@holocene ~]$ sudo chroot /mnt/maverick
root@holocene:/# grep DISTRIB_DESC /etc/lsb-release
DISTRIB_DESCRIPTION="Ubuntu 10.10"
root@holocene:/# dpkg-query -s coreutils | grep Version
Version: 8.5-1ubuntu3
root@holocene:/# echo 哈哈 | cut -c 2-
��哈

Если Вы также используете Ubuntu, можно сообщить об ошибке к Ubuntu coreutils поставщики программного блока путем выполнения следующей команды:

apport-bug coreutils

Обновление: Gilles указывает в комментариях, что это - ошибка в восходящей версии coreutils тот Fedora исправил. Можно найти их патч здесь, если требуется попытаться исправить его сами для получения его работа.

4
03.09.2011, 03:04
2 ответа

Во-первых, обратите внимание, что Вам не нужен вызов к grep, между прочим: это может эффективно интегрироваться в awk звонить.

<logfile awk '/endQuery/ {print $3 " " $1}'

Можно отфильтровать запрещенные запросы на этапе awk. Сохраните продолжающиеся запросы в массиве, удалите их, если они запрещаются и только распечатывают незапрещенные.

<logfile awk '
    $2 == "startQuery" {q[$1]=1}        # store the names of active queries
    q[$1] && /banned/ {delete q[$1]}    # delete banned queries
    $2 == "endQuery" {
        if (q[$1]) print $3, $1;        # only report non-banned queries
        delete q[$1];
    }
' | sort -nr | head -n 3
4
27.01.2020, 20:56

Мне удалось сформулировать следующее:

diff <(grep "endQuery" logfile | awk '{print $1}') \
     <(grep "banned"   logfile | awk '{print $1}') | \
  grep "<" | awk '{print $2}' | xargs -I{0} grep "{0} endQuery" logfile | \
    awk '{print $3 " " $1}' | sort -nr | head -n3
1434 query3
1000 query2
100 query4

Однако это требует захвата через файл журнала 3 раза, который может быть дорогим для больших файлов журнала.

0
27.01.2020, 20:56

Теги

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