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

Wie füge ich Farbcode hinzu? '\ E [1; 32m'awk Farbcode zum Text hinzufügen

Ich versuche in printf das Hinzufügen, es gib mir Ausgabe des Strings statt Farbcode ..

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

Macht das Farbcode Arbeit mit einem normalen 'echo'? – Shahbaz

Antwort

6

awk nicht erkennt '\ e' als Code für das Escape-Zeichen. Hier ist eine Behelfslösung (etwas elegantere existieren):

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

Hmm .. wie kann ich damit codieren? – user1745860

+4

Wie wäre es ... mit \ 033 anstelle von \ – GottZ

+0

Ich vergesse immer die oktalen Escape. – chepner

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

Zeichenfolge YELLOW in Gelb gedruckt werden würde (Farbe)

HINWEIS die erste ^[ Sie haben ctrl-v geben Sie dann ESC

Ich würde einen Screenshot hinzufügen, um zu zeigen.

enter image description here

der Screenshot oben zeigte, dass es unter zsh und bash gearbeitet.

1

Hoffe das hilft jedem auf der Suche nach einer Antwort!

Wie Sie sehen können, die Funktionen und verschiedene Initialisierung ermöglicht es, eine ganz einfache Druckzeile wie folgt zu schreiben.

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

Für die colour Funktion können Sie in der Integer-Wert der Farbe oder den Namen passieren entweder. Es benötigt Parameter in den folgenden Formaten.

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

Sie können selektiv die erforderlichen Parameter angeben.

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 richtig zitiert gibt Farbe:

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

Hinweis, wie man $1 unten an unescape benötigt:

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

Code-only Antworten sind in der Regel verpönt.Bitte bearbeiten Sie Ihre Antwort, um eine Beschreibung zu enthalten, was der Code macht und wie er die Frage beantwortet. –

1

dieses Beispiel:

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

enter image description here

Farbe wird durch "\033[32m"

Für Farben gegeben:

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