Что-то не могу окончательно разобраться: у чего производительность получится выше и ощутимо ли...
делаю
Код: Выделить всё
tcpdump udp -i eth0 -n | \
grep --line-buffered \
'192\.168\.0\.2[501][206]\.12[43][40]:'| \
sed -e 's/.*\([0-5][0-9]\):\([0-5][0-9]\)\.//' | \
awk '{
ipnum=0
for (ipnum in ip) {
if (ip[ipnum] == $5) break
ipnum++
}
if (ip[ipnum] != $5) ip[ipnum]=$5
a[ipnum]=$1
b=( a[ipnum]-aold[ipnum] )
if ((b>500000) || (b<0)) {
print $1 >> ""ip[ipnum]
aold[ipnum]=a[ipnum]
}
fflush()
}'
Таким образом awk распознаёт несколько адресов юникаст пакетов MPEG2, и раз в полсекунды примерно записывает что-то в файл, у которого в названии unicast ip-адрес. Если запись в файл перестаёт осуществляться в течение какого-то времени, другой скрипт бьёт тревогу о прекращении потока по данному юникаст адресу (по другим то адресам запись в файлы идёт). Система довольно слабенькая, пережившая уже несколько реинкарнаций, в связи с чем возникает потребность в максимальной оптимизации. Если написать то, что делает awk, программкой на си (пока не умею, но наверно смог бы осилить), будет ли производительность этого добра по-выше?