我收到以下错误:
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 }'
这样的其他命令,它可以正常工作而不会出错。
任何人都明白为什么我会收到此错误?或者,我应该忽略它吗?
答案 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
添加到环境中。
添加-b
(二进制)参数。像这样:
cat file.txt | awk -b 'length($0)<10000' > output-file.txt
您可以检查是否在Linux上使用gawk
或mawk
实现(第一个安装时在Ubuntu上安装了相同名称的软件包)。对于Ubuntu,您可以运行
sudo update-alternatives --config awk