You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GAWK/AWK中字段与变量模式匹配失效问题排查

问题解决:UTF-16编码导致AWK字段匹配失败

我尝试提取文件中第13个字段匹配39905或19043的行,执行了以下命令:

head input.dat |
awk -F '|' -v CODE="39905|19043" '{print $13; if($13~CODE){print "Matched"} else {print "Nomatch"} }'

执行后发现,明明存在符合匹配条件的字段值,但所有结果都返回Nomatch。

原因分析

通过十六进制分析确认,输入文件input.dat采用UTF-16 LE编码,而AWK默认处理UTF-8编码文本。UTF-16编码的ASCII字符会携带额外空字节(比如字符3在UTF-16 LE中是0x33 0x00),导致AWK读取的第13个字段包含不可见冗余字节,无法与纯ASCII模式字符串匹配。

解决方法

先用iconv将UTF-16 LE编码转成UTF-8,再执行AWK命令:

head input.dat | iconv -f UTF-16LE -t UTF-8 |
awk -F '|' -v CODE="39905|19043" '{print $13; if($13~CODE){print "Matched"} else {print "Nomatch"} }'

转码后字段内容恢复为正常文本,AWK即可正确匹配指定模式。

内容的提问来源于stack exchange,提问作者user5336

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:25:19