如何用awk拆分单列的输出?

时间:2015-04-25 08:45:20

标签: regex linux awk grep

我想从netstat -tulpn命令中查找端口和IP地址。 输出是这样的:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 127.0.0.1:3010          0.0.0.0:*               LISTEN              
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN           
tcp        0      0 127.0.1.1:5334          0.0.0.0:*               LISTEN          
tcp        0      0 127.0.0.1:6113          0.0.0.0:*               LISTEN           
tcp6       0      0 ::1:601                 :::*                    LISTEN            
udp        0      0 0.0.0.0:5013            0.0.0.0:*                           
udp        0      0 127.0.1.1:5333          0.0.0.0:*                               
udp        0      0 0.0.0.0:6341            0.0.0.0:*                           
udp        0      0 0.0.0.0:53553           0.0.0.0:*                                
udp        0      0 0.0.0.0:5123            0.0.0.0:*                           
udp6       0      0 :::4905                 :::*                                
udp6       0      0 :::353                  :::*                                

使用awk我获得了本地地址列。

sudo netstat -tulpn | awk '{ print $4;}'

现在我只想将端口和IP相互拆分并显示在两个单独的列中。最简单的方法是什么? (正则表达式或类似的东西)

1 个答案:

答案 0 :(得分:1)

您想要拆分该字段中的 last 冒号。使用GNU awk:

gawk '{match($4, /(.*):(.*)/, m); print m[1], m[2]}'

gawk '{print gensub(/(.*):/,"\\1 ", 1, $4)}'

使用非GNU awk:

mawk '{ip=$4; sub(/:[^:]+/,"",ip); port=$4; sub(/.*:/,"",port); print ip,port}'

使用perl

perl -lapE '$_ = join(" ", $F[3] =~ /(.*):(.*)/)'

将输出传输到| column -t以使其漂亮。