Shell脚本中AWK单独运行正常嵌入后无法正确执行问题
问题原因排查
原始代码错误点
- awk默认无法直接读取shell上下文的变量,且你用单引号包裹了awk的执行语句,shell不会对单引号内的
$SUB做变量替换,awk实际执行的判断逻辑是「第一个字段等于固定字符串"$SUB"」,自然匹配不到任何内容,返回空值,后续数值判断时就会抛出unary operator expected报错。
二次修改后代码的错误点
- 你用
-v参数把shell变量导入awk上下文的逻辑是对的,但错误地将$1用双引号包裹,awk会把"$1"识别为固定字符串,不是「取当前行第一个字段」的语法,所以仍然匹配失败。
正确的AWK写法
#!/bin/bash -x # 直接在read时拆分字段,省去cut调用 while IFS=, read -r SUB rest do # 用-v传入shell变量,匹配到后直接exit提前终止文件读取,提升效率 VAL=$(awk -F',' -v sub="$SUB" '$1 == sub {print 1; exit}' count.csv) # 匹配不到时VAL默认设为0,避免空值导致后续判断报错 VAL=${VAL:-0} echo "$VAL" if [ "$VAL" -eq 1 ];then echo "$SUB has entry in the output sheet!" else echo "$SUB doesn't have entry!" fi done < GTPL_SLA.dat
内容的提问来源于stack exchange,提问作者vkeeWorks
相关产品推荐
相关产品推荐

