2013-01-23 19 views
6
awk -F: '{ printf "%-3s %-2s","\n" $1 $2; }' 

如何添加顏色代碼? 「\ E [1;32米」awk將顏色代碼添加到文本

我嘗試對printf增加,這給我的字符串,而不是顏色代碼的輸出..

'\e[1;32m' ....... 
+0

這是否顏色代碼工作與正常'echo'? – Shahbaz

回答

6

awk不承認「\ E」作爲代碼轉義字符。這裏有一個解決方法(東西更優雅可能存在):

# Decimal 27 is the ASCII codepoint for the escape character 
awk '{ printf "%c[1;32m foo\n", 27 }' <<<foo 
+0

嗯..我該如何編碼? – user1745860

+4

怎麼樣..使用\ 033而不是\ e – GottZ

+0

我總是忘記八進制轉義。 – chepner

2
awk 'BEGIN{print "^[[1;33mYELLOW"}' 

將打印在黃(色)的字符串YELLOW

注意 第一^[你必須鍵入ctrl-v然後ESC

我會添加一個屏幕快照來顯示。

enter image description here

上面的截圖顯示了它的zsh下和bash工作。

1

希望這有助於任何人尋找答案!如你所見,這些函數和各種初始化可以寫出一個相當簡單的打印行,如下所示。

print colour("Red")$1colour("Blue")$0colour("None"); 

對於colour功能,既可以通過在顏色或名稱的整數值。它採用以下格式的參數。

colour(<attribute> , <background-colour> , <foreground-colour>) 
colour(<background-colour> , <foreground-colour>) 
colour(<foreground-colour>) 

您可以選擇性地提供所需的參數。

function isnumeric(x) 
{ 
    return (x == x+0); 
} 

function name_to_number(name, predefined) 
{ 
    if (isnumeric(name)) 
     return name; 

    if (name in predefined) 
     return predefined[name]; 

    return name; 
} 

function colour(v1, v2, v3) 
{ 
    if (v3 == "" && v2 == "" && v1 == "") 
     return; 

    if (v3 == "" && v2 == "") 
     return sprintf("%c[%dm", 27, name_to_number(v1, fgcolours)); 
    else if (v3 == "") 
     return sprintf("%c[%d;%dm", 27, name_to_number(v1, bgcolours), name_to_number(v2, fgcolours)); 
    else 
     return sprintf("%c[%d;%d;%dm", 27, name_to_number(v1, attributes), name_to_number(v2, bgcolours), name_to_number(v3, fgcolours)); 
} 

BEGIN { 
    # hack to use attributes for just "None" 
    fgcolours["None"] = 0; 

    fgcolours["Black"] = 30; 
    fgcolours["Red"] = 31; 
    fgcolours["Green"] = 32; 
    fgcolours["Yellow"] = 33; 
    fgcolours["Blue"] = 34; 
    fgcolours["Magenta"] = 35; 
    fgcolours["Cyan"] = 36; 
    fgcolours["White"] = 37; 

    bgcolours["Black"] = 40; 
    bgcolours["Red"] = 41; 
    bgcolours["Green"] = 42; 
    bgcolours["Yellow"] = 43; 
    bgcolours["Blue"] = 44; 
    bgcolours["Magenta"] = 45; 
    bgcolours["Cyan"] = 46; 
    bgcolours["White"] = 47; 

    attributes["None"] = 0; 
    attributes["Bold"] = 1; 
    attributes["Underscore"] = 4; 
    attributes["Blink"] = 5; 
    attributes["ReverseVideo"] = 7; 
    attributes["Concealed"] = 8; 
} 

{ 
    print colour("Red")$1colour("Blue")$0colour("None"); 
} 
7

\033[?m正確引用賦予顏色:

awk 'BEGIN{ print "\033[34msomething in colour\033[0m";}' 

通知一個需要怎樣下面反轉義$1

echo something | awk '{ print "\033[34m"$1" in colour \033[0m";}' 
-2
BDF() 
{ 
#awk 'BEGIN{ print "\033[34msomething in colour\033[0m";}' 
#bdf $spool $data $sysout ~ /home/fnsonlh |grep -v avail| awk '{print $5" "$4"  "}' | tail -n +2 |tr -d "\012" 
bdf $spool $data $sysout ~ /home/fnsonlh |grep -v avail| awk '{if($4 > 89) 
{ 
    print "\033[0;31m"$5" "$4"\033[0m  " 
    } 
else 
{ 
    print "\033[0;32m"$5" "$4"\033[0m  " 
}}' |tail -n +2 |tr -d "\012" 
#"\012 is new line caracter" 
echo 
#/usr/bin/w -u 
uptime 
} 
#[email protected] 
+0

僅有代碼的答案通常是不被接受的。請編輯您的答案,以包含代碼正在執行的內容以及它如何回答問題的描述。 –

1

試試這個例子:

echo "line 1 
line 2" | awk '/line/ {print "\033[32m" $1 "\033[31m" $2 }' 

enter image description here

顏色由"\033[32m"

給出對於顏色:

30 - black 34 - blue   
    31 - red  35 - magenta  
    32 - green 36 - cyan   
    33 - yellow 37 - white