先准备好测试文件
[root@node4 ~]# cat 2.1
No. Table Name Src Count Des Count Result
1 sbtest1 100 100 PASS
2 sbtest2 200 300 NOTPASS
3 sbtest3 150 150 PASS
4 sbtest4 400 401 NOTPASS
如图:
准备好脚本
解决一:
#!/bin/bash
# 设定颜色
RED_BACKGROUND='\033[41m' # 红色背景
WHITE='red\033[0m' # 白色字体
NO_COLOR='\033[0m' # 重置颜色
# 文件名
FILE_NAME="2.1"
# 读文件并进行处理=
awk -v red1="$RED_BACKGROUND" -v white="$WHITE" -v nc="$NO_COLOR" 'BEGIN {FS="[ ]+"; OFS=" | "}
{
if (NR==1) {
# 打印标题行
print $0;
} else {
# 对比第三和第四列
if ($3 != $4) {
# 如果不同,改变输出颜色
print $1, $2, $3, $4, red1 whit$5nc;
} else {
# 如果相同,保持原样
print $1, $2, $3, $4, $5 ;
}
}
}' $FILE_NAME
解决二:
awk 'BEGIN {
FS="[ ]+"; # 字段分隔符设置为竖线加空格
OFS=" | "; # 输出字段分隔符同上
RED="\033[1;31m"; # 设置红色高亮的ANSI码
GREEN="\033[1;32m"; # 设置绿色高亮的ANSI码
RESET="\033[0m"; # 重置颜色设置的ANSI码
}
NR==1 {print $0; next;} # 打印标题行并继续
{
if ($3 != $4) { # 比较“Src Count”和“Des Count”列
print $1, $2, $3, $4, RED $5 RESET; # 如果不相同,打印红色高亮的“Result”
} else {
print $1, $2, $3, $4, GREEN $5 RESET; # 如果相同,打印绿色高亮的“Result”
}
}' 2.1
可以通过以下命令赋予执行权限:
chmod +x 1.sh
然后再次运行脚本:
./1.sh
运行结果:
如果继续遇到问题,请确认以下几点:
-
您的终端是否支持ANSI颜色代码。可以通过简单的echo语句测试,比如
echo -e "\033[41mRed Background\033[0m"
,这应该输出一个红色背景的文本。 -
脚本中颜色代码的使用是否正确。请注意,颜色代码前应使用反斜杠(\)而不是正斜杠(/),并且颜色代码周围不能有多余的空格或字符。
-
确保颜色代码对应的是bash shell的语法。如果您使用的是不同的shell,如zsh或fish,颜色代码的语法可能略有不同。
-
尝试不要在脚本中使用变量,而是直接在
print
语以排除变量传递问题。 -
当使用颜色代码时,需要确保在ANSI颜色代码后面紧跟着文本内容。例如,
red white $5 nc
这种使用方式是错误的,因为它将颜色代码和变量混淆在一起了。 -
结果显示为 “redPASS” 和 “redNOPASS”,这是因为
white
变量包含了字符串 “red”,而不是实际的颜色代码。
在这份脚本中,注意到以下几点:
awk
命令中使用red
、white
和nc
的方式,确保它们都紧跟着它们需要修饰的文本。- 在打印不同颜色时,确保文本紧随颜色代码之后。