Linux uniq-c不与awk合作?

Linux uniq-c不与awk合作?,linux,shell,awk,gawk,Linux,Shell,Awk,Gawk,我有一个包含多个数据的日志文件,我想从该文件中筛选DHCPREQUEST IP上的数据,我想计算日志文件中该服务内容的IP请求的次数如下:- Mar 22 11:20:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2 Mar 22 11:19:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.2 from aa:00:00:00:00:00 (pc)

我有一个包含多个数据的日志文件,我想从该文件中筛选DHCPREQUEST IP上的数据,我想计算日志文件中该服务内容的IP请求的次数如下:-

Mar 22 11:20:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:19:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.2 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:18:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.2 from aa:00:00:00:17:00 (pc) via 10.1.1.2
Mar 22 11:16:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:15:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:14:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:12:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:11:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
使用此代码,我打印计数与grep IP,但它显示计数1为重复的IP也请建议我做错了什么

five_min='Mar 22 11:15:34' 
while IFS= read -r line; do
    if [[ "$five_min" < "$line" ]] 
    then
        echo "$line" | grep DHCPREQUEST  | awk -F  " " '{print $8 }' | uniq -c
    fi
done < file.txt
5分钟class='3月22日11:15:34'
而IFS=读取-r行;做
如果[[“$5_min”<“$line”]]
然后
echo“$line”| grep DHCPREQUEST | awk-F“{print$8}”| uniq-c
fi
完成
您在一行上运行该命令,因此得到1是有意义的

具有以下test.txt

Mar 22 11:20:34 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:20:35 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
Mar 22 11:20:36 DHCP-IP dhcp: DHCPREQUEST for 10.1.1.1 from aa:00:00:00:00:00 (pc) via 10.1.1.2
命令:

grep DHCPREQUEST test | awk '{print $8}' | uniq -c
印刷品:

3 10.1.1.1

以下单曲
awk
也可能对您有所帮助

awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){array[substr($0,RSTART,RLENGTH)]++} END{for(i in array){print array[i],i}}'  Input_file
现在也添加了一个非线性的解决方案

awk '
match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){  array[substr($0,RSTART,RLENGTH)]++  }
END{
  for(i in array)                         {  print array[i],i                    }
}
'   Input_file

使用这种方法,但仍然无法获得正确的重复ipCan计数。请发布文件的可复制内容?它与您在测试中使用的内容相同file@Vijay划分管道-检查
grep
的输出,然后检查管道
awk
@Vijay,我们都在努力学习,老实说,你的信息还不够。我仍然会说重新表述您的问题,并让我们知道需要什么,以便阅读此线程的其他人也能从中受益。重新定义标准实现的
-F”“
是没有用的。此外,您正在awk调用中使用管道:根据您的口味,这可能会导致问题。