【问题标题】:How to print awk's results with different colors for different fields?如何为不同的字段打印不同颜色的awk结果?
【发布时间】:2019-04-12 11:48:55
【问题描述】:

此文件有 3 个字段。我想要例如前 2 个字段为绿色,第三个字段为白色(NB:黑色背景),所以我尝试了:

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

一切都是绿色的……

我必须如何进行(如果可能)?

【问题讨论】:

    标签: awk gawk


    【解决方案1】:

    要从 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)
    }
    

    【讨论】:

    • 小心使用这些函数。他们使用外部字符串作为格式说明符。如果字符串包含格式字符(% 等),它将失败。最好使用function red(string) { printf ("%s%s%s", "\033[1;31m", string, "\033[0m "); }
    • 我无法得到工作的答案,甚至没有这个建议。但以下对我有用:function yellow(s) {return "\033[1;93m" s "\033[1;39m"}
    【解决方案2】:

    使用 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"}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多