提取脚本输出文件中的某些数据

提取脚本输出文件中的某些数据

我们有一个脚本,它运行多个命令并汇总所有输出并插入到日志文件中。它运行的命令之一是“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)。

相关内容