表形式の行と列を含むテキストファイルの出力を印刷する方法

表形式の行と列を含むテキストファイルの出力を印刷する方法

私の出力ファイルには次の内容が含まれています。

出力.txt

2020.11.07-22.3.31 INFO - :|FSNAME:|AVAILABLE:|AVAILABILITY
2020.11.07-22.3.31 INFO - :|/opt:|yes:|1.4GB
2020.11.07-22.3.31 INFO - :|/data:|yes:|30GB

上記の値は、output.txtその変数から加算されて出力されるサイズが異なり、文字に限定することはできません。

columnインストールコマンドはありませんmiller

次の方法を使用しましたが、出力は順番になりません

  • awk '{ gsub(":", " " ) } 1' output.txt
    2020.11.07-22.3.31 INFO -  |FSNAME |AVAILABLE |AVAILABILITY
    2020.11.07-22.3.31 INFO -  |/opt |yes |1.4GB
    2020.11.07-22.3.31 INFO -  |/data |yes |30GB
    
  • awk -F ':' '{printf "%-10s%-10s%-10s%-10s\n", $1,$2,$3,$4}' output.txt
    2020.11.07-22.3.31 INFO -  |FSNAME    |AVAILABLE|AVAILABILITY
    2020.11.07-22.3.31 INFO -  |/opt      |yes      |1.4GB
    2020.11.07-22.3.31 INFO -  |/data     |yes      |30GB
    

可変サイズのいずれかを出力ファイルに書き込むのに10秒以上かかると、次のようにフォーマットが正しくありません。

出力.txt

2020.11.07-22.3.31 INFO - :|FSNAME:|AVAILABLE:|AVAILABILITY
2020.11.07-22.3.31 INFO - :|/opt:|yessssssss:|1.4GB
2020.11.07-22.3.31 INFO - :|/data:|yes:|30GB
awk -F ':' '{printf "%-10s%-10s%-10s%-10s\n", $1,$2,$3,$4}' output.txt
2020.11.07-22.3.31 INFO -  |FSNAME    |AVAILABLE|AVAILABILITY
2020.11.07-22.3.31 INFO -  |/opt      |yessssssss|1.4GB
2020.11.07-22.3.31 INFO -  |/data     |yes      |30GB

問題を解決するのに役立ちます。

答え1

次の2段階の方法では、フィールドの形式を固定列幅で指定する必要があります。

awk -F':\\|' -v OFS='|' 'NR==FNR{for (i=1;i<=NF;i++) {if (length($i)>max[i]) max[i]=length($i);} next;}
           {for (i=1;i<=NF;i++) $i=sprintf("%-*s",max[i],$i)}1' output.txt output.txt

これが処理するでしょうoutput.txt 二重(それで引数として2回指定する必要がありますawk。)

  • 最初のステップ(FNRファイルごとのラインカウンタがグローバルラインカウンタと同じ)では、単に各フィールドエントリの最大長を見つけ(配列内のすべてのフィールドをNR繰り返す)、配列に保存します。$1$NFmax
  • sprintf2番目のパスでは、最大フィールド幅の配列に基づいて決定された固定幅のフィールドの形式を(再)指定します。max
  • 入力されたフィールド区切り文字は結合文字シーケンスとして扱われます:|(マルチ文字であるため、適切なエスケープを使用)。入力するフィールド区切り文字は正規表現として扱われ、|特別な意味を持ちます。出力フィールド区切り文字はSingleに設定されます|

あなたの例の結果

2020.11.07-22.3.31 INFO - |FSNAME|AVAILABLE|AVAILABILITY
2020.11.07-22.3.31 INFO - |/opt  |yes      |1.4GB       
2020.11.07-22.3.31 INFO - |/data |yes      |30GB        

関連情報