ANSIエスケープコードを含む入力データを「表にする」ためのシェルツール

ANSIエスケープコードを含む入力データを「表にする」ためのシェルツール

私の入力には、テーブルとして書きたいANSIカラーコードが含まれています。出力の色を維持したいので、表形式の出力はANSIカラーコードを維持する必要があります。だから、無邪気にそれらを剥がすことは私には合いません。

たとえば、この入力の場合

\033[0;32;1mgreen_apple\033[0m 1 100
orange 20 19
pineapple 1000 87
avocado 4 30

私が期待する結果は次のようになります。

green_apple 1    100
orange      20   19
pineapple   1000 87
avocado     4    30

上記の出力では、「green_apple」は、入力カラーコード(緑など)に従って色を付ける必要があります。私はこれを達成する方法を知りたいです。

その列を試しましたが、ANSIコードを処理しません。出力

echo '\033[0;32;1mgreen_apple\033[0m 1 100
orange 20 19
pineapple 1000 87
avocado 4 30' | column -t

残念ながら

green_apple  1     100
orange                  20    19
pineapple               1000  87
avocado                 4     30

表形式ではないことに注意してください。

ベストアンサー1

そのような命令はなく、手動で行う必要があると思います。それは次のとおりです。

awk '
  {
    nf[NR]=NF
    for (i = 1; i <= NF; i++) {
      f[NR,i] = $i
      gsub(/\033\[[0-9;]*[mK]/, "", $i)
      len[NR,i] = l = length($i)
      if (l > max[i]) max[i] = l
    }
  }
  END {
    for (n = 1; n <= NR; n++) {
      for (i = 1; i < nf[n]; i++)
        printf "%s%*s", f[n,i], max[i]+1-len[n,i], ""
      print f[n,nf[n]]
    }
  }'

おすすめ記事