grep / awk netstat或ss的优化输出

时间:2019-02-15 12:27:57

标签: awk grep

我正在尝试编写一个bash脚本,该脚本输出在端口8000(icecast)上建立的TCP连接,并从该列表中过滤内部IP地址。

这里有两个有效的示例,但我需要优化命令行的帮助。

1。

    netstat -ant | grep 8000 | grep ESTABLISHED | grep -v
'192.168.1.102

2。

    ss -H -nt sport eq 8000 | awk '{print $5}'| awk -F':' '{print $1}' |
    grep -v '192.168.1.102'

有人可以帮我组合grepawk过滤器吗?据我了解,SS命令的性能要优于netstat命令。但是,如果有人知道更好的应用程序来获取上述信息并对其进行过滤,那么我将改用它。

SS的示例输出:

ESTAB       0      1400   192.168.3.2:8000               x.x.x.x:62090             

ESTAB 0 0 192.168.3.2:8000 192.168.1.102:1033

netstat的示例:

    tcp        0   1400 192.168.3.2:8000        x.x.x.x:62090       ESTABLISHED
    tcp        0   0    192.168.3.2:8000        192.168.1.102:1033  ESTABLISHED
    tcp        0   0    192.168.3.2:22          y.y.y.y:32897       ESTABLISHED

1 个答案:

答案 0 :(得分:1)

请记住,Awk可以完成grep可以做的所有事情,并且通常几乎一样快。作为一般指导,请尝试减少进程数。因此,尝试将所有管道重构为一个Awk程序。

  1. 您也想转义IP地址中的点。

    netstat -ant | awk '/8000/ && /ESTABLISHED/ && ! /192\.168\.1\.102/'
    
  2. 这有点挑战,但绝不复杂。

    ss -H -nt sport eq 8000 |
    awk '{ split($5, a, /:/); if (a[1] !~ /192\.168\.1\.102/) print a[1] }'