Ubuntu下运行fastText向量提取Awk脚本报错:unexpected character 0xe2
解决Ubuntu下Awk脚本报错「unexpected character 0xe2」的方案
报错原因
报错里的0xe2是UTF-8编码的特殊字符,大概率是脚本中混入了全角符号或智能弯引号。Mac默认文本编辑器(如TextEdit)会自动将直引号转为弯引号,或输入时误触全角模式,这些符号在Ubuntu的GNU Awk中属于非法字符,导致解析失败。
修复步骤
1. 排查并替换特殊字符
用命令行查看脚本中的不可见字符:
cat -A your_script.awk
输出中M-bM-^@M-^Y这类乱码就是0xe2开头的特殊字符,找到对应位置(第5、13行),将所有符号(等号、方括号、引号等)替换为半角英文符号。
2. 重写关键代码行
手动重新输入第5、13行代码,确保符号纯半角:
INCLUDE[$1] = 1 if ($1 in INCLUDE) print >> outfile
3. 使用纯文本编辑器编辑脚本
在Ubuntu上用nano、vim或VS Code(切换英文半角输入)编辑脚本,避免Mac编辑器的自动格式转换。
4. 验证并转换脚本编码
检查脚本编码:
file your_script.awk
若编码不是UTF-8,用iconv转换:
iconv -f MacRoman -t UTF-8 your_script.awk > fixed_script.awk
完整可用示例脚本
以下是确保无特殊字符的完整脚本,可直接使用:
BEGIN { outfile = "fasttextvectors_adjectives.txt" # 加载形容词词表 while ((getline < "adjectives.txt") > 0) { INCLUDE[$1] = 1 } close("adjectives.txt") } # 匹配并输出目标向量 { if ($1 in INCLUDE) { print >> outfile } } END { close(outfile) }
运行命令:
awk -f fixed_script.awk cc.en.300.vec
内容的提问来源于stack exchange,提问作者Ka Souza
相关产品推荐
相关产品推荐

