一个shell工具,用于“tablify”包含ANSI转义码的输入数据

我有输入包含ANSI颜色代码,我想要tablify.我希望输出保持颜色,因此tablified输出应保持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

注意非tablification.

最佳答案
我不认为有这样的命令,你必须手工完成.就像是:

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]]
    }
  }'

转载注明原文:一个shell工具,用于“tablify”包含ANSI转义码的输入数据 - 代码日志