gpt4 book ai didi

shell - 如何根据条件为awk的输出着色

转载 作者:行者123 更新时间:2023-12-04 05:38:40 26 4
gpt4 key购买 nike

我有一个包含以下内容的输入文件 test.txt:

 a 1 34
f 2 1
t 3 16
g 4 11
j 5 16

我使用 awk 只打印字符串 2 和 3:

awk '{print $2 " " $3}' test.txt

有没有一种方法可以根据条件只为输出的第二个字符串着色,如果该值高于 15,则以橙色打印,如果该值高于 20,则以红色打印。它会给出相同但有颜色的:

1 34(red)
2 1
3 16(orange)
4 11
5 16(orange)

输入可以以不同的顺序包含更多行。

最佳答案

这个 awk 命令应该做你想做的:

awk -v red="$(tput setaf 1)" -v yellow="$(tput setaf 3)" -v reset="$(tput sgr0)" '{printf "%s"OFS"%s%s%s\n", $1, ($3>20)?red:($3>15?yellow:""), $3, reset}'

这里的关键位是

  • 使用 tput 获取当前终端颜色设置的正确表示(与硬编码特定转义序列相反)
  • 使用 -v 设置 awk 命令用来构造其输出的变量值

上面的脚本写得很简洁,但可以这样写得不那么简洁:

{
printf "%s"OFS, $1
if ($3 > 20) {
printf "%s", red
} else if ($3 > 15) {
printf "%s", yellow
}
printf "%s%s\n", $3, reset
}

编辑:Ed Morton 正确地指出,上面的 awk 程序可以通过使用 color 变量并将颜色选择与打印分开来简化。像这样:

awk -v red="$(tput setaf 1)" -v yellow="$(tput setaf 3)" -v reset="$(tput sgr0)" \
'{
if ($3>20) color=red; else if ($3>15) color=yellow; else color=""
printf "%s %s%s%s\n", $1, color, $3, reset
}'

关于shell - 如何根据条件为awk的输出着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com