タブとスペースを含むテキストから均一な列を作成するには?

タブとスペースを含むテキストから均一な列を作成するには?

file.txt最も簡単な形式で、次の自動生成ファイルがあるとしますfile.txt

 Source                    Destination                Maximum To  Maximum From Average Total   Average To           Average From
(192.168.1.1)   (192.168.1.2)       202.89 Kbps    0 bps         645 bps 645 bps 0 bps

column私はこのコマンドをいくつかのバリエーションで試しましたが、役に立ちませんでした。この出力を次のように作成するにはどうすればよいですか?

Source         Destination     Maximum To     Maximum From     Average Total     Average To     Average From
(192.168.1.1)  (192.168.1.2)   202.89 Kbps    0 bps            645 bps           645 bps        0 bps

これを行う方法を知る必要があるようですが、空白を描いていますが、これまで期待どおりに機能している項目が見つかりませんでした。

編集する:以下の説明と回答はsed元の例と完全に一致しています。 (私は実際には説明の解決策がより簡単でパイピングを含まないので好みますtr。)つまり、両方の解決策は複数行ファイルでまったく同じパフォーマンスを発揮します。これには、file.txtさまざまな長さの数百行のIPv4アドレスが含まれます。sedこれまでのところ、両方のソリューションは元のものよりも正確な結果を次のように返しますfile.txt

ソースファイル.txt:

Source                    Destination                Maximum To  Maximum From Average Total   Average To           Average From
(10.10.10.21)     (192.168.123.122)      18.90 Kbps     0 bps         131 bps 131 bps 0 bps
(10.10.10.22)     (192.168.123.122)       10.88 Kbps     0 bps         23 bps 23 bps 0 bps
(10.10.10.23)     (192.168.123.123)       10.88 Kbps     0 bps         23 bps 23 bps 0 bps
(192.168.123.123) (192.52.168.123)       0 bps          22.84 Kbps    1.17 Kbps 0 bps     1.17 Kbps
(192.168.123.124)  (192.52.168.123)       0 bps          10.87 Kbps    19 bps 0 bps  19 bps

更新されたfile.txt(これまで提案されたソリューションを使用した後):

Source                              Destination        Maximum To  Maximum From  Average Total  Average To  Average From
(10.10.10.21)                       (192.168.123.122)  18.90 Kbps  0 bps         131 bps        131 bps     0 bps
(10.10.10.22)                       (192.168.123.122)  10.88 Kbps  0 bps         23 bps         23 bps      0 bps
(10.10.10.23)                       (192.168.123.123)  10.88 Kbps  0 bps         23 bps         23 bps      0 bps
(192.168.123.123) (192.52.168.123)  0 bps              22.84 Kbps  1.17 Kbps     0 bps          1.17 Kbps
(192.168.123.124)                   (192.52.168.123)   0 bps       10.87 Kbps    19 bps         0 bps       19 bps

このオフセット警告を解決するための更新されたソリューションはありますか?

ベストアンサー1

スクリプトはOPのサンプルデータに基づいています。

sed '
    s/\s\s\+/:/g
    s/\([a-z)]\)\s\([(0-9A]\)/\1:\2/g
    ' file.txt | 
column -s: -t
  • 見つけやすい区切り文字を変更して始めます(\s手順2以降)。:
  • 2番目のステップでは、残りの可能な区切り文字を探します。
    • 小文字と数字の間
    • 後ろに)
    • 今後A
  • 列区切り文字を使用した文字列の書式設定:

おすすめ記事