Страница 1 из 2
awk прошу помощи
Добавлено: 2012-01-23 14:37:52
killeo
Код: Выделить всё
# IPFMv0.11.5 2012/01/23 12:55:00 (local time) -- dump every 0d00:05:00 -- listening on fxp0
# Host In (bytes) Out (bytes) Total (bytes)
192.168.11.2 8741 31497 40238
192.168.11.4 437888443 6576316 444464759
192.168.11.5 800 640 1440
192.168.11.6 25653 48952 74605
192.168.11.7 33303 36697 70000
192.168.11.8 2011169 32034827 34045996
192.168.11.9 244655 84210 328865
192.168.11.10 32021 49714 81735
192.168.11.18 6571711 393276 6964987
192.168.11.23 2217622 98022074 100239696
192.168.11.24 225904 773775 999679
192.168.11.25 393368187 10739065 404107252
192.168.11.29 3798035 133903 3931938
192.168.11.255 2018 0 2018
# end of dump 2012/01/23 12:55:00
awk '/192.168.11.2/ {printf $2}' | sed -e 's/.\$//'
выводит
8741221762222590439336818737980352018
т.е. 192.168.11.2,192.168.11.23,и т.д.
как всё-таки вывести значение именно для 192.168.11.2
Re: awk прошу помощи
Добавлено: 2012-01-23 15:11:41
bagas
у тебя ошибка в printf без конечной буквы f
Re: awk прошу помощи
Добавлено: 2012-01-23 15:39:10
kpp
Код: Выделить всё
awk '/192.168.11.2[ <->]/ {printf $2}' | sed -e 's/.\$//'
<-> - табуляции.
В awk есть и print и printf.
Re: awk прошу помощи
Добавлено: 2012-01-23 16:20:00
kpp
Можно без использования awk:
Код: Выделить всё
grep "192.168.11.2[ <-->]" | tr -s [" "] ">" | cut -f 2
<--> и > - табуляция
Re: awk прошу помощи
Добавлено: 2012-01-23 17:34:25
killeo
большое спасибо! с awk всё получилось, а с grep
Код: Выделить всё
cat /home/a | grep '"192.168.11.2[ <-->]" | tr -s [" "] ">" | cut -f 2' > /home/tmp2
grep: Invalid range end
ещё хотел спросить
почеу не работает
Код: Выделить всё
cat /home/a | awk '/192.168.11.2[ <->]/ {printf $2 \":\" $3}' | sed -e 's/.\$//' > /home/tmp2
awk: syntax error at source line 1
context is
/192.168.11.2[ <->]/ {printf $2 >>> \ <<< ":\" $3}
awk: illegal statement at source line 1
хотя в рабочем скрипте
Код: Выделить всё
cat \$TMPFILE | awk '/In4\/Block|Out4\/Block/ {printf \$6 \":\"}'|sed -e 's/.\$//'
Re: awk прошу помощи
Добавлено: 2012-01-23 18:01:24
kpp
Код: Выделить всё
grep "192.168.11.2[ <-->]" /home/a | tr -s [" "] ">" | cut -f 2 > /home/tmp2
или
Код: Выделить всё
cat /home/a | grep "192.168.11.2[ <-->]" | tr -s [" "] ">" | cut -f 2 > /home/tmp2
но первый вариант предпочтителен.
Код: Выделить всё
awk '/192.168.11.2[ <->]/ {printf $2 ":" $3}' /home/a | sed -e 's/.\$//' > /home/tmp2
Какое форматирование на выходе получить нужно?
Re: awk прошу помощи
Добавлено: 2012-01-23 18:25:21
killeo
форматирование на выходе 8741:31497
Код: Выделить всё
awk '/192.168.11.2[ <->]/ {printf $2 ":" $3}' /home/a | sed -e 's/.\$//' > /home/tmp2
с этим справляется. Большое спасибо! (осталось разобраться как-то это в *.rrd внести )
Re: awk прошу помощи
Добавлено: 2012-01-23 18:28:53
kpp
Код: Выделить всё
/usr/local/bin/rrdtool update имя_файла.rrd N:$значенией:$значение2:$значение3 и т.д.
Предварительно имя_файла.rrd создать нужно.
Re: awk прошу помощи
Добавлено: 2012-01-23 21:48:15
killeo
ну вот примерно так
Код: Выделить всё
#!/bin/sh
BASE="/var/db/rrd"
HOSTDIR="$BASE/"
HOSTLIST="192.168.11.2"
mkdir -p $HOSTDIR
for i in $HOSTLIST
do
rrdtool create $HOSTDIR/$i.rrd \
DS:In:COUNTER:120:U:U \
DS:Out:COUNTER:120:U:U \
DS:Total:COUNTER:120:U:U \
RRA:AVERAGE:0.5:1:6000 \
RRA:AVERAGE:0.5:5:6000 \
RRA:AVERAGE:0.5:30:7000 \
RRA:AVERAGE:0.5:120:7750 \
RRA:MAX:0.5:1:6000 \
RRA:MAX:0.5:5:6000 \
RRA:MAX:0.5:30:7000 \
RRA:MAX:0.5:120:7970 \
RRA:MIN:0.5:1:6000 \
RRA:MIN:0.5:5:6000 \
RRA:MIN:0.5:30:7000
done
unset BYTES
BYTES="`cat /var/log/ipfm/all-01.23 | awk '/192.168.11.2[ <->]/ {printf $2 ":" $3 ":" $4}'|sed -e 's/.$//'`"
/usr/local/bin/rrdtool update /var/db/rrd/192.168.11.2.rrd N:$BYTES
в логах чисто, а графка нету
Re: awk прошу помощи
Добавлено: 2012-01-23 23:23:09
killeo
rrdtool fetch /var/db/rrd/192.168.11.2.rrd AVERAGE
Код: Выделить всё
In Out Total
1327263600: nan nan nan
1327263900: nan nan nan
1327264200: nan nan nan
Re: awk прошу помощи
Добавлено: 2012-01-23 23:30:44
mak_v_
Код: Выделить всё
| grep "192.168.0.5" | awk '{print $2" "$3" "$4}'
Re: awk прошу помощи
Добавлено: 2012-01-24 14:13:31
killeo
Спасибо! всё почти получилось
только не понятно, когда в теринале
Код: Выделить всё
cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $2 ":" $3 ":" $4}'|sed -e 's/.$//' > /home/tmp
то вывод 1098:1731:282(к примеру).
когда в скрипте
Код: Выделить всё
#!/bin/sh
A="`cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $2 ":" $3 ":" $4}'|sed -e 's/.$//'`"
/usr/bin/nice -n20 /usr/local/bin/rrdtool update /var/db/rrd/192.168.11.2.rrd N:$A
то
# rrdtool fetch /var/db/rrd/192.168.11.2.rrd AVERAGE
Код: Выделить всё
...
1327401900: nan nan nan
1327402800: nan nan nan
1327403700: nan nan nan
...
Re: awk прошу помощи
Добавлено: 2012-01-24 14:18:20
mak_v_
зачем вы седом в конце выбираете?
Re: awk прошу помощи
Добавлено: 2012-01-24 14:39:45
kpp
Последнюю внесенную запись в файл.rrd удобнее смотреть:
Код: Выделить всё
rrdtool lastupdate /var/db/rrd/192.168.11.2.rrd
Это:
Код: Выделить всё
A="`cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $2 ":" $3 ":" $4}'|sed -e 's/.$//'`"
лучше преобразовать к виду:
Код: Выделить всё
A="`grep "192.168.11.2[ <->]" /var/log/ipfm/all-01.23 | awk '{print $2 ":" $3 ":" $4}'`"
Зачем
? Какой последний символ в строке Вам не нравится?

Re: awk прошу помощи
Добавлено: 2012-01-24 15:06:45
mak_v_
Код: Выделить всё
!/bin/sh
A=`/bin/cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $2}'
B=`/bin/cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $3}'
C=`/bin/cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $4}'
/usr/bin/nice -n20 /usr/local/bin/rrdtool update /var/db/rrd/192.168.11.2.rrd N:$A:$B:$C
? Какой последний символ в строке Вам не нравится?

Не силён в регекспах. Я интересуюсь, зачем тут сед? Какую функцию регулярка выполняет?
Re: awk прошу помощи
Добавлено: 2012-01-24 15:11:17
kpp
2
mak_v_
Все мои вопросы предназначены автору.
Я сам не знаю зачем тут сед.
2
mak_v_
Зачем стрелять три раза из awk, если можно одним?
Re: awk прошу помощи
Добавлено: 2012-01-24 15:17:14
mak_v_
возможно..... разделитель ":" не воспринимается из переменной.
Просто уже надо всех ложить на поражение а не заниматься снайперством :-)....перебирать помагаю :
Re: awk прошу помощи
Добавлено: 2012-01-24 15:23:02
kpp
эквивалент
, потому как команда редактирования всего одна.
Возвращает исходную\ные строку\и без последнего символа.
Re: awk прошу помощи
Добавлено: 2012-01-24 15:29:49
kpp
Можете считать меня занудой

, но вместо
Код: Выделить всё
A=`/bin/cat /var/log/ipfm/all-01.23 | grep "192.168.11.2[ <->]" | awk '{print $2}'
не скажу "правильней", скажу - "оптимальней" делать так:
Код: Выделить всё
A=`grep "192.168.11.2[ <->]" /var/log/ipfm/all-01.23 | cut -f 2
- если разделитель табуляция или
Код: Выделить всё
A=`grep "192.168.11.2[ <->]" /var/log/ipfm/all-01.23 | cut -d" " -f 2
- если разделитель - пробел
У каждой команды есть возможность считать файл самостоятельно.
Для банального получения значения поля лучше использовать cut чем awk.
Re: awk прошу помощи
Добавлено: 2012-01-24 15:46:14
killeo
по поводу seg - просто скопировал строку с рабочего скрипта, хотя назначения не знаю, но результат выполнения, как с так и без, одинаковы.
и Спасибо за разъяснения и советы!
Re: awk прошу помощи
Добавлено: 2012-01-24 15:55:56
kpp
Результат не одинаковый!
Если с этим sed - потеряете последнюю цифру в последнем числе.
И будут Ваши графики погоду показывать.
А если это число будет состоять из одной цифры - так вообще ошибка намечается.
Re: awk прошу помощи
Добавлено: 2012-01-24 16:03:58
killeo
Теперь увидел!
Re: awk прошу помощи
Добавлено: 2012-01-24 16:10:07
killeo
Подскажите пожалуйста, почему rrdtool lastupdate показывает, что данные внесены, а rrdtool fetch дату этого внесения не покаывает(ну и соответственно nan)
Re: awk прошу помощи
Добавлено: 2012-01-24 16:34:12
kpp
Я не эксперт по rrdtool, но думаю, что последняя запись типа "nan nan...nan" - это резерв под следущую запись.
Re: awk прошу помощи
Добавлено: 2012-05-10 19:20:33
Andrey__s
Есть файл:
aaa=1 bbb=2 ccc=3 ddd=4 eee=5
bbb=3 ccc=4 ddd=5 eee=1 aaa=2
ccc=5 ddd=1 eee=2 aaa=3 bbb=4
ddd=2 eee=3 aaa=4 bbb=5 ccc=1
eee=4 aaa=5 bbb=1 ccc=2 ddd=3
Как с помощью AWK или чего другого получить:
1.)
1 aaa=1
2 aaa=2
3 aaa=3
4 aaa=4
5 aaa=5
2.)
1 aaa=1 bbb=2 ccc=3 ddd=4 eee=5
2 aaa=2 bbb=3 ccc=4 ddd=5 eee=1
3 aaa=3 bbb=4 ccc=5 ddd=1 eee=2
4 aaa=4 bbb=5 ccc=1 ddd=2 eee=3
5 aaa=5 bbb=1 ccc=2 ddd=3 eee=4
Грубо говоря как в awk переменной присвоить значение столбца содержащего /ааа/ и вывести на печать и т.д.