【问题标题】:uniq treats lines as equal when they are notuniq 将不相等的行视为相等
【发布时间】:2017-04-07 13:45:07
【问题描述】:

我希望这个命令有不同的输出:

$ echo -e "あいうえお\nオエウイア" | uniq -c
      2 あいうえお

这两行相同。
与此示例相比,按预期工作:

$ echo -e "aiueo\noeuia" | uniq -c
      1 aiueo
      1 oeuia

这是 Unicode 还是 UTF-8 问题?我没有找到任何支持“外来”字符的选项。

编辑:我在使用带有日文输入的排序时遇到了类似的问题。 a\nb\na\nb\n(或省略'\n',abab)形式的输入保持不变,我希望它是aabb 或至少bbaa

【问题讨论】:

  • 在我的环境中,它按预期工作。您使用的是uniqsort 的哪个版本?我的是 Arch Linux 上的 uniq (GNU coreutils) 8.26
  • 我的是 GNU coreutils 8.23,Ubuntu。
  • 我确认在某些语言环境中,uniq 的行为类似于您的问题。但是,我无法重现 sort 问题。检查您的LANGLC_ALLlocale 命令的输出,并尝试类似echo -e "あいうえお\nオエウイア" | LC_COLLATE=C uniq -cecho -e "a\nb\na\nb\n" | LC_ALL=C sort
  • 设置 LC_COLLATE 似乎有效。谢谢。

标签: uniq


【解决方案1】:

你去 - echo -e "あいうえお\nオエウイア" | uni2ascii -q | uniq -c | ascii2uni

【讨论】:

  • 工作,谢谢!有趣的是,你对为什么普通的 uniq/sort 有这种奇怪的行为有任何解释吗?我的意思是,a 的排序顺序有什么用?
  • 谁知道?可能是 uniq 源代码中的一些默认行为,以及它如何处理非 ascii 字符或超出特定 unicode 范围的字符。也许这是一个语言环境问题。请接受我的回答,因为它对你有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多