2017-07-19 156 views
0

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

我:

#!/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 }' 

$值是从一个列表循环,在这里,我只是把它们加起来代表将要呈现的数据。 上述输出该列表:

value1  value2 value3 
value4  value5 value6 

我可以分配颜色代码,像这样对于第一列:

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

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

+1

也许你需要周围切换你的报价,并做一些深奥的转义,如'回声“$值“| awk“{printf \”$ color%-10s $ color2%-8s%-8s \\ n \“,\ $ 1,\ $ 2,\ $ 3}”' –

+0

这样做,我修好了第一部分,但没有$字段的转义。谢谢! – stargazer

回答

2

该问题与awk的shell和脚本之间的混合引号级别有关。如果你仔细逃避字符串中的报价和美元awk的变量,你可以得到它像这样工作:

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

再次感谢,这按预期工作。 – stargazer