2011-06-30 124 views
12

此文件有3個域。我想要第2場在綠色和白色(注:黑色背景)第三,所以我嘗試:如何用不同的字段以不同的顏色打印awk的結果?

awk '{print "\033[0;32m"$1"\033[0m", "\033[0;32m"$2"\033[0m", "\033[0;37m"$3"\033[0m"} }' chrono.txt 

,一切都是綠色......

我必須如何進行(如果可能的話)?

回答

26

要從awk獲得顏色輸出,可以使用這種方法。

function red(s) { 
    printf "\033[1;31m" s "\033[0m " 
} 

function green(s) { 
    printf "\033[1;32m" s "\033[0m " 
} 

function blue(s) { 
    printf "\033[1;34m" s "\033[0m " 
} 

{ 
    print red($1), green($2), blue($3) 
} 
+0

非常感謝你,它精美的作品 – ThG

+0

@ThG很高興我能幫助:-) –

+7

謹慎使用這些功能。他們使用外部字符串作爲格式說明符。如果字符串包含格式字符(%等),則會失敗。更好地使用'function red(string)'printf(「%s%s%s」,「\ 033 [1; 31m」,string,「\ 033 [0m」); } –

0

使用awk函數的替代方法是在shell變量中傳遞顏色。例如。

RED='\033[01;31m' 
GREEN='\033[01;32m' 
YELLOW='\033[01;33m' 
BLUE='\033[01;34m' 

echo "Col1 Col2 Col3 Col4" | \ 
awk -v r=$RED -v y=$YELLOW -v g=$GREEN -v b=$BLUE -v n=$NONE \ 
'{printf r$1n y$2n g$3n b$4n "\n"}'