加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux排序与Perl字符串比较

发布时间:2020-12-14 00:33:43 所属栏目:Linux 来源:网络整理
导读:因为我正在处理非常大的文件,所以我在比较它们之前对基础文件和候选文件进行了排序,以查看另一条文件中缺少的行.我这样做是为了避免将记录保存在内存中.排序是使用 Linux命令行工具sort进行的. 在我的Perl脚本中,我会查看该行中的字符串是否为lt,gt或eq到另
因为我正在处理非常大的文件,所以我在比较它们之前对基础文件和候选文件进行了排序,以查看另一条文件中缺少的行.我这样做是为了避免将记录保存在内存中.排序是使用 Linux命令行工具sort进行的.

在我的Perl脚本中,我会查看该行中的字符串是否为lt,gt或eq到另一个文件中的行,并在必要时推进文件中的指针.但是,当我注意到我的字符串比较认为基本文件中的字符串是包含特殊字符的候选文件中的字符串时,我遇到了问题.

是否有一种确定的方法可以确保我的Linux排序和Perl字符串比较使用相同类型的字符串比较器?

解决方法

sort命令使用环境变量LC_ALL指定的当前语言环境来确定字符的排序顺序.通常,修复排序问题的最简单方法是手动将其设置为C语言环境,该语言环境将每个8位字节视为单个字符,并通过简单的数值进行比较.在大多数shell中,这可以作为一个单独的命令来完成,通过为它添加前缀:

LC_ALL=C sort < infile > outfile

这也将解决其他一些文本处理程序的类似问题. (例如,我回忆起在德国人的计算机上使用CSV文件的问题 – 这可以追溯到德国人使用逗号而不是小数点的事实.在相关命令前面放置LC_ALL = C也解决了这个问题.)

[编辑]虽然可以指示Perl将某些字符串视为Unicode,但默认情况下它仍然将输入和输出视为8位字节的流,因此上述方法应该生成与Perl的sort()函数相同的顺序. (感谢Ven’Tatsu这个金块.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读