Это похоже на ошибку в Вашей сборке/версии 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 исправил. Можно найти их патч здесь, если требуется попытаться исправить его сами для получения его работа.
Во-первых, обратите внимание, что Вам не нужен вызов к 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
Мне удалось сформулировать следующее:
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 раза, который может быть дорогим для больших файлов журнала.