我有这个输出,我想按端口按数字排序(从第 35 列开始):
tcp 0 0 192.168.0.210:110 0.0.0.0:* LISTEN 3385/dovecot
tcp 0 0 192.168.0.210:143 0.0.0.0:* LISTEN 3385/dovecot
tcp 0 0 192.168.0.210:22 0.0.0.0:* LISTEN 2223/sshd
tcp 0 0 192.168.0.210:25 0.0.0.0:* LISTEN 3589/master
tcp 0 0 192.168.0.210:443 0.0.0.0:* LISTEN 2037/apache
tcp 0 0 192.168.0.210:587 0.0.0.0:* LISTEN 3589/master
tcp 0 0 192.168.0.210:80 0.0.0.0:* LISTEN 2037/apache
# ^
# Sorted at this column (#35)
这样新的输出看起来像这样(最低端口优先):
tcp 0 0 192.168.0.210:22 0.0.0.0:* LISTEN 2223/sshd
tcp 0 0 192.168.0.210:25 0.0.0.0:* LISTEN 3589/master
tcp 0 0 192.168.0.210:80 0.0.0.0:* LISTEN 2037/apache
tcp 0 0 192.168.0.210:110 0.0.0.0:* LISTEN 3385/dovecot
tcp 0 0 192.168.0.210:143 0.0.0.0:* LISTEN 3385/dovecot
tcp 0 0 192.168.0.210:443 0.0.0.0:* LISTEN 2037/apache
tcp 0 0 192.168.0.210:587 0.0.0.0:* LISTEN 3589/master
# ^
# Sorted at this column (#35)
我尝试过所有不同形式的|sort
,包括:
|sort -n # <- I thought this would work
|sort -nk35
|sort -nk35,37
诸如此类,等等。也许我误解了旗帜的目的-k
?或者也许那些冒号把事情搞砸了?
答案1
sort
需要空格分隔的字段。要使其在端口上排序,您应该更改字段分隔符:
sort -t: -nk2 file
这里,我讲的sort
是:
作为字段分隔符。因此,第二个字段的第一个字符是端口号,它按照您想要的方式排序:
$ sort -t: -nk2 file
tcp 0 0 192.168.0.210:22 0.0.0.0:* LISTEN 2223/sshd
tcp 0 0 192.168.0.210:25 0.0.0.0:* LISTEN 3589/master
tcp 0 0 192.168.0.210:80 0.0.0.0:* LISTEN 2037/apache
tcp 0 0 192.168.0.210:110 0.0.0.0:* LISTEN 3385/dovecot
tcp 0 0 192.168.0.210:143 0.0.0.0:* LISTEN 3385/dovecot
tcp 0 0 192.168.0.210:443 0.0.0.0:* LISTEN 2037/apache
tcp 0 0 192.168.0.210:587 0.0.0.0:* LISTEN 3589/master