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

背景

今天遇到一件比较奇怪的事,同一个文件在统计重复行时出现了不同的结果,手动执行时去重后有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进程生效,重启也不会丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值