Как напечатать результаты awk разными цветами для разных полей? - PullRequest
14 голосов
/ 01 июля 2011

Этот файл имеет 3 поля.Я хотел, например, первые 2 поля зеленым цветом, а третье - белым (примечание: черный фон), поэтому я попытался:

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

и все было зеленым…

Как мне действовать(если это возможно)?

Ответы [ 2 ]

27 голосов
/ 01 июля 2011

Чтобы получить вывод цвета из 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)
}
2 голосов
/ 04 сентября 2017

Альтернативой использованию функций awk является передача цветов в переменных оболочки.Например,

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"}'
...