この出力があり、それをポートごとに数値順に並べ替えたいと思います(列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
これについて話しています。:
したがって、第2フィールドの最初の文字はポート番号であり、所望の方法でソートされる。
$ 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