如何使用不同颜色的不同字段打印awk的结果?

ThG*_*ThG 15 awk gawk

该文件有3个字段.我想要例如绿色的前两个字段,白色的第三个字段(NB:黑色背景),所以我试过:

awk '{print "\033[0;32m"$1"\033[0m", "\033[0;32m"$2"\033[0m", "\033[0;37m"$3"\033[0m"} }' chrono.txt
Run Code Online (Sandbox Code Playgroud)

一切都是绿色的......

我该如何进行(如果可能的话)?

Fre*_*ihl 28

要从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)
}
Run Code Online (Sandbox Code Playgroud)

  • 小心这些功能.他们使用外部字符串作为格式说明符.如果字符串包含格式字符(%等),则会失败.更好地使用类似`function red(string){printf("%s%s%s","\ 033 [1; 31m",string,"\ 033 [0m"); }` (8认同)

Mat*_*dge 8

使用 awk 函数的另一种方法是在 shell 变量中传递颜色。例如

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

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"}'
Run Code Online (Sandbox Code Playgroud)