2017-07-19 93 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