计算Shell脚本中文件中特定数字的出现

时间:2018-12-03 02:44:57

标签: shell unix

我的文件有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

我需要计算出现word = bnd0的src ip地址的发生率。 我应该只考虑值为bnd0的行,其他行可以排除。

我的输出应该像

123.456.5.444 - 2
123.456.5.234  - 3
123.456.5.775 - 2

我是Shell脚本的新手。非常感谢您的投入。

1 个答案:

答案 0 :(得分:2)

尝试一下:

这是您的文件:

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:将从上述输出中仅找到唯一的行,并打印出重复项的数量。