我们有一个脚本,它运行多个命令并汇总所有输出并插入到日志文件中。它运行的命令之一是“netstat -anp”。我希望能够搜索此文件以查找命令的所有运行并过滤某些 IP。这可以用 sed 或 awk 实现吗?如果可以的话,命令会是什么样子?
答案1
要从文件中过滤数据,最好使用 grep。例如:
grep <search string> <filename>
使用 awk,您可以使用类似以下内容:
awk '/string/ {command}' <filename>
要计算 IP,您可以使用
uniq -c <filename>
这将为您提供带有计数的 uniq IP
答案2
我认为“卷起”意味着所有换行符都被删除,并且每个命令的输出因此“卷起”到一行。如果是这样,你grep ... | awk ...
会工作,但你不需要这两个命令(“当一个就足够时永远不要使用两个”通常是一个好主意)。此外,您的命令行有几个问题(例如没有输入grep
但给定了文件名awk
,意味着它grep
不起作用,并且没有理由在有选项wc
时使用)。grep
-c
ipaddr=192.168.0.1
grep -c "netstat -anp.*$ipaddr" logfile
编辑:
您最新的评论说您想要计算 IP 地址在给定时间间隔内出现的次数。由于该netstat
命令在时间间隔内运行多次,并且它们都在一行上,因此简单的命令uniq -c
是不够的。事实上,在不求助于 perl 的情况下,这是我想到的第一件事:
ipaddr=192.168.0.1
grep "netstat -anp.*$ipaddr" logfile |
tr -cs '0-9.' '\012' |
grep -c "$ipaddr"
我假设是 POSIX 或 BSD 风格的tr
命令。此外,第二个grep
也是必要的,因为除了您要查找的 IP 地址之外,可能还有许多其他 IP 地址(这对于输出来说是典型的netstat
)。