ファイルの2番目のフィールドに基づいてIPアドレスをソートする

ファイルの2番目のフィールドに基づいてIPアドレスをソートする

私のkshスクリプトに次のタスクを追加する必要があります(OS - linux / solaris)。

次のファイルがあります

 more test.txt


 /etc/backup/app 172.1.120      172.110.120 
 /etc/backup/app 172.1.120.12   172.110.120.98 
 /etc/backup/app 192.1.120      192.120.120 
 /etc/backup/app 172.1.120.1      172.110.120.7 
 /var/log/df     193.23.2       193.23.2
 /var/log/df     193.23.2.111   193.23.2.159

すべてのIPを見つける方法4オクテットファイルの先頭に異なるIP3オクテット

注 - IPは2番目のフィールドに基づいてソートされます。

要求ファイルの例(ソート後)

    more test.txt

    /etc/backup/app 172.1.120.12   172.110.120.98 
    /etc/backup/app 172.1.120.1    172.110.120.7
    /var/log/df     193.23.2.111   193.23.2.159
    /etc/backup/app 172.1.120      172.110.120 
    /etc/backup/app 192.1.120      192.120.120 
    /var/log/df     193.23.2       193.23.2

回避策は sort や ksh/awk/sed/perl oneliner... などを使って行うことができます。

ベストアンサー1

GNU awkここに必要な行があるとしましょう。

$ awk '{n=split($2,ip,".");if(n==4)print $0;else a[$2]=$0}END{n=asorti(a,b);for(i=1;i<=n;i++)print a[b[i]]}' file
/etc/backup/app 172.1.120.12   172.110.120.98 
/etc/backup/app 172.1.120.1    172.110.120.7 
/var/log/df     193.23.2.111   193.23.2.159
/etc/backup/app 172.1.120      172.110.120 
/etc/backup/app 192.1.120      192.120.120 
/var/log/df     193.23.2       193.23.2

おすすめ記事