修复awk命令中数据和本地之间的不匹配

时间:2016-10-14 18:09:57

标签: linux bash unix awk locale

我收到以下错误:

awk: cmd. line:1: (FILENAME=- FNR=798) warning: Invalid multibyte data detected. There may be a mismatch between your data and your locale.

我正在运行的命令如下:

cat file.txt | awk 'length($0)<10000' > output-file.txt

奇怪的是,如果我使用awk '{ sub("\r$", ""); print }'这样的其他命令,它可以正常工作而不会出错。

任何人都明白为什么我会收到此错误?或者,我应该忽略它吗?

2 个答案:

答案 0 :(得分:7)

将区域设置设为C,仅使用带有单字节编码的ASCII字符集,将LC_ALL=C传递给awk的环境:

LC_ALL=C awk 'length($0)<10000' file.txt >output-file.txt

此外,您不需要使用cat,因为awk将文件名作为参数。

答案 1 :(得分:0)

我在机器上找到了三种解决方案:

更改环境变量

已批准的问题已得到回答。

将变量export LC_ALL=C添加到环境中。

添加参数(仅适用于gawk)

添加-b(二进制)参数。像这样:

cat file.txt | awk -b 'length($0)<10000' > output-file.txt

使用mawk代替gawk

您可以检查是否在Linux上使用gawkmawk实现(第一个安装时在Ubuntu上安装了相同名称的软件包)。对于Ubuntu,您可以运行

sudo update-alternatives --config awk

Source answer