此awk命令應做你想做的事:
awk -v red="$(tput setaf 1)" -v yellow="$(tput setaf 3)" -v reset="$(tput sgr0)" '{printf "%s"OFS"%s%s%s\n", $1, ($3>20)?red:($3>15?yellow:""), $3, reset}'
的密鑰比特這裏是
- 使用
tput
得到設置顏色爲當前終端的正確表示(而不是硬編碼的特定轉義序列)
- 使用
-v
到設置的變量的AWK命令使用來構造其輸出
上述腳本簡潔地寫入,但可以更小簡潔地寫成這樣的值:
{
printf "%s"OFS, $1
if ($3 > 20) {
printf "%s", red
} else if ($3 > 15) {
printf "%s", yellow
}
printf "%s%s\n", $3, reset
}
編輯:Ed Morton正確地指出,通過使用color
變量並將顏色選擇與打印分開,可以簡化上述awk程序。就像這樣:
awk -v red="$(tput setaf 1)" -v yellow="$(tput setaf 3)" -v reset="$(tput sgr0)" \
'{
if ($3>20) color=red; else if ($3>15) color=yellow; else color=""
printf "%s %s%s%s\n", $1, color, $3, reset
}'
你問如何着色輸出字符串或者如何基於一個條件或兩個這樣做呢? – 2015-02-18 00:14:08
我要求兩個,如果價值高於15,然後打印橙色,如果高於20,然後打印紅色,低於15,然後只是正常打印。 – raphy75 2015-02-18 00:18:53