Подсчитать вхождение определенного числа в файле в сценарии оболочки - PullRequest
0 голосов
/ 03 декабря 2018

В моем файле 10 строк:

line one word=bnd0 src=123.456.5.444 dst=123.456.5.35
line two word=bnd1 src=123.456.5.78 dst=123.456.5.35
line three word=bnd1 src=123.456.5.78 dst=123.456.5.35
line four word=bnd0 src=123.456.5.444 dst=123.456.5.35
line five word=bnd0 src=123.456.5.234 dst=123.456.5.35
line six word=bnd0 src=123.456.5.234 dst=123.456.5.35
line seven word=bnd0 src=123.456.5.234 dst=123.456.5.35
line eight word=bnd0 src=123.456.5.775 dst=123.456.5.35
line nine word=bnd0 src=123.456.5.775 dst=123.456.5.35
line ten word=bnd1 src=123.456.5.78 dst=123.456.5.3

Мне нужно подсчитать вхождение IP-адреса src, где слово = bnd0.Я должен рассматривать только строки со значением bnd0, другие строки могут быть исключены.

Мой вывод должен выглядеть так:

123.456.5.444 - 2
123.456.5.234  - 3
123.456.5.775 - 2

Я новичок в сценарии оболочки.Буду очень признателен за ваш вклад.

1 Ответ

0 голосов
/ 03 декабря 2018

Попробуйте:

Это ваш файл:

mayankp@mayank:~/$ cat ff.txt
line one word=bnd0 src=123.456.5.444 dst=123.456.5.35
line two word=bnd1 src=123.456.5.78 dst=123.456.5.35
line three word=bnd1 src=123.456.5.78 dst=123.456.5.35
line four word=bnd0 src=123.456.5.444 dst=123.456.5.35
line five word=bnd0 src=123.456.5.234 dst=123.456.5.35
line six word=bnd0 src=123.456.5.234 dst=123.456.5.35
line seven word=bnd0 src=123.456.5.234 dst=123.456.5.35
line eight word=bnd0 src=123.456.5.775 dst=123.456.5.35
line nine word=bnd0 src=123.456.5.775 dst=123.456.5.35
line ten word=bnd1 src=123.456.5.78 dst=123.456.5.3

Вывод:

mayankp@mayank:~/$ grep 'word=bnd0' ff.txt | awk -F'src=' '{print $2}' | awk -F'dst=' '{print $1}' |uniq -c
      2 123.456.5.444 
      3 123.456.5.234 
      2 123.456.5.775 

Вы можете поэкспериментировать с указанным выше выводом, чтобы распечатать его на своемтребуемый формат.

Пояснение :

grep 'word=bnd0' ff.txt: при этом будут выполняться поиск строк, имеющих word=bnd0, остальные строки будут исключены.

awk -F'src=' '{print $2}': эта команда awk разделит вышеуказанные строки на основе src= в качестве разделителя и выберет содержимое, которое появляется после src=.

awk -F'dst=' '{print $1}': эта команда awk разделит на разделительdst= и выберет содержимое раньше dst=.

Итак, теперь у нас остался только фактический ip_addr для выбранных строк.

uniq -c: будет найден только уникальныйстрок из вышеприведенного вывода и вывести количество дубликатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...