Windows批处理脚本中使用gawk时如何正确进行字符串比较
gawk字符串比较正确实现方式
问题原因
gawk语法中,未加引号的标识符会被解析为变量名、内置函数/内置变量,不会直接作为字符串常量处理。你写的$1==WIDTH里,WIDTH是未赋值的自定义变量,默认值为空字符串,自然无法和第一列的文本匹配成功。
之前数值比较命令能正常运行,是因为裸写的1200属于数值字面量,gawk会自动把字段的字符串值转换为数值类型做相等判断,不需要额外加引号。
正确写法
gawk中的字符串字面量必须用双引号包裹,字符串比较为逐字符精确匹配,区分大小写,匹配内容需要和目标文本完全一致。
匹配第一列为WIDTH的行的正确命令:
gawk '{if($1=="WIDTH") print $1,$2}' filename
注意:你提供的示例文件中第一列内容拼写为
WIDHT(T、H字母顺序颠倒),如果文件实际存储的是该拼写,需要把引号内的比较值改为完全一致的"WIDHT"才能匹配成功。
Windows批处理环境适配
如果是在Windows CMD/批处理脚本中执行,遇到引号解析问题,可以将gawk的脚本块外层改用双引号包裹,脚本内部的字符串双引号用反斜杠转义即可,示例:
gawk "{if($1==\"WIDTH\") print $1,$2}" filename
内容的提问来源于stack exchange,提问作者Saint Paul
相关产品推荐
相关产品推荐

