LINUX.ORG.RU

Сравнение всех файлов в каталоге

 , , , ,


0

1

Всем привет!

Решил проверить какие пиры в asterisk не используются сотрудниками компании.

Настроил скрипт который каждые пол часа проверяет какие пиры в оффлайне:

now=$(date +«%Y%m%d%H%M»)

/usr/sbin/asterisk -rx 'sip show peers' | grep «Unspec» | sed 's/[/].*//' >> /var/log/asterisk/offline/offline_$now

Вывод вот такой:

/usr/sbin/asterisk -rx 'sip show peers' | grep «Unspec» | sed 's/[/].*//' | tail -3

891 894 899

Структура файлов получается вот такая:

ls /var/log/asterisk/offline/

offline_201309051400 offline_201309051418 offline_201309051530 offline_201309051700 offline_201309051830 offline_201309052000 offline_201309052130 offline_201309051405 offline_201309051430 offline_201309051600 offline_201309051730 offline_201309051900 offline_201309052030 offline_201309052200 offline_201309051406 offline_201309051500 offline_201309051630 offline_201309051800 offline_201309051930 offline_201309052100 offline_201309052230

Как можно проверить все файлы на наличие одинаковых записей, чтобы определить какие пиры постоянно в оффлайне?



Последнее исправление: r1sh (всего исправлений: 1)

Чё-то туплю. В этом вашем астериске кол-во нод ограничено? Если да, то создай для каждой файл и для активных обновляй время модификации.

ziemin ★★
()
Последнее исправление: ziemin (всего исправлений: 2)

Самый простой вариант:

TMPFILE=$(mktemp)
cat offline_* > $TMPFILE   # всё в кучу
sed -i 's/ /^M/g' $TMPFILE # тут как я понял в твоих файлах все числа в ряд. Меняем по одному на строчку.
sort $TMPFILE | uniq -d    # показываем только дупликаты
rm $TMPFILE

beastie ★★★★★
()
Ответ на: комментарий от i_gnatenko_brain

Diff я смотрел разные варианты, там либо файл-файл либо каталог-каталог, варианта файл-каталог я не видел

r1sh
() автор топика
Ответ на: комментарий от ziemin

не ограничено, просто я хочу статистику собрать, ее никто, похоже никогда не собирал ни по используемым аккаунтам, ни по максимально активным каналам. Как это делать красиво через сниферы или snmp я не нашел, по этому делаю все через скрипты: поиск неиспользуемых пиров, выгрузка в файлы активных звонков и каналов каждую минуту, активные транки и тд и тп:)

r1sh
() автор топика
Ответ на: комментарий от beastie

спасибо за ответ!

ошибся с разметкой, числа по одну на столбец, как я понимаю

sed -i 's/ /^M/g' $TMPFILE

делает то что пропускает строку и делает переход на новую?

uniq -d

он выведет те строки которые повторялись больше всего раз или те которые просто повторялись?

просто я сделал:

cat offline_20130905* | sort | uniq -c | tail -10 он мне вывел:

      9 865
     10 866
      7 867
     10 868
     10 890
     10 891
     10 894
      9 895
     10 896
     10 899

по идее мне нужны те которые повторялись максимум раз

r1sh
() автор топика
Ответ на: комментарий от beastie

получилось сделать вот таким образом, но head не очень нравится:

TMPFILE=$(mktemp) cat offline_* > $TMPFILE sort $TMPFILE | uniq -cd | sort -nr | head -n 120 | sort

теоретически можно еще дополнить считывание с этого вывода символов первой строки до пробела и удалять все строки которые начинаются с числа до пробела меньше чем это, но это для меня уже темный лес

r1sh
() автор топика
Ответ на: комментарий от r1sh
  1. меняет пробелы на перевод строки (^M — вводится как Ctrl-M (RET))
  2. uniq -d — всё, что присутствует больше одного раза
  3. лучше будет: cat offline_20130905* | sort -n | uniq -c | sort -k 1 -n | tail -10
beastie ★★★★★
()
Ответ на: комментарий от beastie

супер, спасибо, сделал так:

cat /var/log/asterisk/offline/offline_* | sort -nr | uniq -cd | sort -nr | head -n 130 | sort -nr > /var/log/asterisk/report/offline

получился формат вывода:

cat /var/log/asterisk/report/offline | head -10
     28 899
     28 896
     28 891
     28 890
     28 866
     28 864
     28 863
     28 858
     28 857
     28 856

можно подсчитать кол-во строк которые начинаются на цифры первой строки до пробела?

r1sh
() автор топика
Ответ на: комментарий от r1sh

можно подсчитать кол-во строк которые начинаются на цифры первой строки до пробела?

... | sed 's/ [0-9]*$//' | uniq -c

или тот же кускок кода с awk выше.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.