Linux由默认语言导致的uniq命令重复计数错误

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010039418/article/details/85339588

背景

今天遇到一件比较奇怪的事,同一个文件在统计重复行时出现了不同的结果,手动执行时去重后有2.5w+,放到crontab中执行,去重后居然有2.9w+。

分析

查看文件内容,发现文件中有一些特殊字符,猜想和系统设置的语言相关,于是测试了一下,

[root@localhost ~]# export LC_ALL=""
[root@localhost ~]# cat /tmp/myfile | sort | uniq | wc
  29777  148885 3415065
[root@localhost ~]# export LC_ALL="zh_CN.gbk"
[root@localhost ~]# cat /tmp/myfile | sort | uniq | wc
  25668  128340 2952262

果然是语言捣的鬼,默认是编码是en_US.UTF-8,而该文件需要在中文模式下才能正常统计,但是crontab中的语言编码并没有设置为中文,因此表现不一致。

解决方案

知道是由于语言设置导致的问题就好办了,有以下几种方案可以解决,

1、在crontab任务脚本中设置语言编码,也就是每个定时任务脚本都要设置,比较麻烦。

2、在/etc/environment文件中设置语言编码,这样crond进程的默认编码就得以修改,不过不确定其他进程会不会使用该文件。

3、在crond的服务文件/etc/init.d/crond中,start函数里设置语言编码。这样只对crond进程生效,重启也不会丢失。

猜你喜欢

转载自blog.csdn.net/u010039418/article/details/85339588
今日推荐