如何为awk printf列指定颜色?

时间:2017-07-19 07:10:32

标签: shell awk

使用shell脚本(sh,no bash)我想在变量中使用awk printf中第1列和第3列的变量颜色。 我想在printf中使用变量,因为脚本使用颜色主题,因此RED_COLOR可能是与我在示例中指定的颜色代码不同的颜色代码。

我有:

#!/bin/sh
RED_COLOR='\033[0;31m'
GREEN_COLOR='\033[0;92m' 
NO_COLOR='\033[00m'


var1=value1
var2=value2
var3=value3

values="$var1 $var2 $var3"

var1=value4
var2=value5
var3=value6

values="$values
$var1 $var2 $var3"

echo "$values" | awk '{ printf "%-10s %-8s %-8s\n", $1, $2, $3 }'

$ values是来自for循环的列表,在这里,我只是将它们相加以表示要呈现的数据。 以上输出此列表:

value1     value2   value3
value4     value5   value6

我可以将颜色分配为代码,如第一列所示:

echo "$values" | awk '{ printf "\033[0;31m%-10s\033[00m  %-8s %-8s\n", $1, $2, $3 }'

但是如何使用变量而不是printf中的颜色代码将颜色分配到第1列和第3列?

1 个答案:

答案 0 :(得分:3)

问题与在shell和awk脚本之间混合引用级别有关。如果你小心地转义字符串中的引号和awk变量的美元,你可以让它像这样工作:

echo "$values" | awk "{ printf \"$color%-10s$color2 %-8s %-8s\\n\", \$1, \$2, \$3 }"