AWK脚本报错:表达式含无效字符''',此前运行正常
AWK脚本执行报错的解决方法
报错原因分析
- 脚本特殊字符被转成HTML实体:你脚本里的
"(对应双引号)、<(对应小于号)、&&(对应逻辑与&&)都是HTML转义字符,AWK无法识别这些实体,直接触发语法错误。 - 在线验证器使用错误:你把完整的Shell命令(包括
awk '、结尾单引号及文件名)都粘贴进去了,但验证器仅需纯AWK脚本代码,不需要外层的Shell调用部分。
修正后的完整命令
先还原所有HTML实体,再移除冗余逻辑,最终命令如下:
awk ' BEGIN{ FS="," } { machinename=$1 compornot=$3 if (compornot == "compliant" && $3 == "compliant") { value = "NA" } else if (compornot == "noncompliant" && $3 == "noncompliant") { value = "No" } else { value = "Yes" } print $1 "," $2 "," compornot "," value "," $3 } ' "$SCRIPT_PATH/$SCRIPT_NAME/kraft_ansible_temp.csv" | tee "$SCRIPT_PATH/$SCRIPT_NAME/kraft_ansible_temp.csv"
冗余逻辑说明
原脚本里的for (i=1; i<=NF; i++)和if ($1 == machinename)完全多余——machinename本身就是从$1赋值来的,这两段代码不会改变任何逻辑,删除后脚本运行效率更高,结果完全一致。
在线验证器正确使用方式
仅粘贴纯AWK脚本部分到验证器:
BEGIN{ FS="," } { machinename=$1 compornot=$3 if (compornot == "compliant" && $3 == "compliant") { value = "NA" } else if (compornot == "noncompliant" && $3 == "noncompliant") { value = "No" } else { value = "Yes" } print $1 "," $2 "," compornot "," value "," $3 }
内容的提问来源于stack exchange,提问作者snigdha singh
相关产品推荐
相关产品推荐

