awk 添加颜色代码到文本

问题描述 投票:0回答:8
awk -F: '{ printf  "%-3s %-2s","\n" $1 $2; }'

如何添加颜色代码? ' [1;32m'

我尝试添加到 printf 中,它给我输出字符串而不是颜色代码..

'\e[1;32m' .......
linux bash shell awk
8个回答
22
投票

\033[?m
正确引用给出颜色:

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

注意下面需要如何取消转义

$1

echo something | awk '{ print "\033[34m"$1" in colour \033[0m";}'

15
投票

尝试这个例子:

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     

9
投票

awk
无法将“ ”识别为转义字符的代码。这是一个解决方法(可能存在更优雅的方法):

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

3
投票

希望这对寻求答案的人有所帮助!

如您所见,函数和各种初始化使得可以编写非常简单的打印行,如下所示。

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");
}

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

将以黄色(颜色)打印字符串 YELLOW

注意 第一个

^[
您必须输入
ctrl-v
然后
ESC

我会添加一个屏幕截图来显示。

enter image description here

上面的截图显示它在 zsh 和 bash 下工作。


0
投票

扩展之前的答案。 我有一个数据表,正在寻找高/低值的异常情况,并需要颜色编码。

示例数据:

pressure|26.89295961625|29.2524056175
radiation||
rain|0.0|0.377952755905517
rainBatteryStatus||
rainRate|0.0|206.399999999998

想要突出高值和低值

awk -F"|" '
BEGIN {
 OFS = "|"  # Ensure the proper output field separator (OFS)
}

{
    # Looping over fields in each line, skipping the first column
    for (i=2 ; i<=NF; ++i) {
        # If the value is over 100 add the color blue
        if (int($i) > 100) {
            $i = sprintf("%s%s%s", "\033[34m", $i, "\033[0m")
        }
        # If the value is under -10 add the color red
        if (int($i) < -10) {
            $i = sprintf("%s%s%s", "\033[31m", $i, "\033[0m")
        }
    }
    # Since I've changed the actual field values a simple print will nicely print my changes
    print
}' input-file.csv

-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]

-2
投票

定义两个变量或您需要的变量

示例:

GREENB='\033[0;41m'    #Green Background (Color verde de fondo)
GREEN='\033[0;32m'     #Green Text (Color verde en el texto
REDB='\033[0;41m'      #Red Background (Color rojo de fondo)
RED='\033[0;31m'       #Red text (Color rojo en el texto)
NORMALB='\033[0;49m'   #Default background (Color por defecto de fondo)
NORMAL='\033[0m'       #Default foreground (Color por defecto del texto)

awk代码:

echo "This is a test" | awk -vRojo=${RED} -v NC=${NORMAL} '{print Rojo $1, $2, NC $3, $4}'


颜色代码说明

\e[${ATTRIBUTE};${BACKGROUND_COLOR};${FOREGROUND_COLOR}m

地点:

  • \e
    <Esc>
    字符(可以是
    \e
    \033
    \x1B
  • ${ATTRIBUTE}
    :定义文本的样式NormalBold/BrightDimUnderlinedBlinkReverseHidden)。 0 为正常;
  • ${BACKGROUND_COLOR}
    :定义背景颜色;
  • ${FOREGROUND_COLOR}
    :定义前景颜色;

更多信息

有关 Bash 颜色的更多颜色和信息 这里

© www.soinside.com 2019 - 2024. All rights reserved.