データを単語で列に並べ替える

データを単語で列に並べ替える

与えられた単語に基づいてデータを良い列にソートするにはどうすればよいですか?

route -nたとえば、次のコマンドの出力があります。

default via 172.20.99.254 dev eth0 
87.33.17.71 dev tun0 scope link 
89.223.15.12 via 172.20.99.254 dev eth0 src 172.20.99.74 
172.20.9.0/24 dev eth0 proto kernel scope link src 172.20.99.74 
65.46.5.89 dev tun0 scope link 
192.168.11.0/24 dev tun0 scope link 
45.211.111.7 dev tun0 scope link 

devその単語を含む列がdev並べ替えるように単語ごとに並べ替えたいと思います。

default via 172.20.99.254       dev eth0 
87.33.17.71                     dev tun0 scope link 
89.223.15.12 via 172.20.99.254  dev eth0 src 172.20.99.74 
172.20.9.0/24                   dev eth0 proto kernel scope link src 172.20.99.74 
65.46.5.89                      dev tun0 scope link 
192.168.11.0/24                 dev tun0 scope link 
45.211.111.7                    dev tun0 scope link 

タブが1つ必要な場合もあり、タブが3つ必要な場合もあるため、素朴に拳の空白文字をタブに置き換えることはできません。

ベストアンサー1

ファイルに存在しないと確信する文字をコマンドのダミー区切り文字として使用しますcolumn。たとえば、次のようになります。

$ sed 's/dev/@dev/' file | column -ts@
default via 172.20.99.254        dev eth0 
87.33.17.71                      dev tun0 scope link 
89.223.15.12 via 172.20.99.254   dev eth0 src 172.20.99.74 
172.20.9.0/24                    dev eth0 proto kernel scope link src 172.20.99.74 
65.46.5.89                       dev tun0 scope link 
192.168.11.0/24                  dev tun0 scope link 
45.211.111.7                     dev tun0 scope link 

-oと一緒に(出力区切り記号を指定)を使用することもcolumn、動作を試すこと-o ""もできます。-o " "

また、上記はsed最初の項目のみを置き換え、単純な一致を使用します。周辺空間マッチングのような他のケースでは、より厳しいマッチングが必要になる場合がある。

おすすめ記事