【问题标题】:Output from sort does not appear to be sortedsort 的输出似乎没有排序
【发布时间】:2019-10-30 05:20:40
【问题描述】:

我有以下文本文件(sort_test.txt):

PGA_scaffold1__77
PGA_scaffold2__36
PGA_scaffold3__111
PGA_scaffold4__129
PGA_scaffold5__109
PGA_scaffold6__104
PGA_scaffold7__69
PGA_scaffold8__63
PGA_scaffold9__45
PGA_scaffold10__49
PGA_scaffold11__79
PGA_scaffold12__71
PGA_scaffold13__52
PGA_scaffold14__91
PGA_scaffold15__101
PGA_scaffold16__33
PGA_scaffold17__51
PGA_scaffold18__69

当我尝试使用以下代码对文件进行排序时,排序输出似乎是乱序的(特别是第 9 行和第 10 行):

输入:awk -F"_" '{print $1"_"$2"_"$3"_"$4}' sort_test.txt | sort

输出:

PGA_scaffold10__49
PGA_scaffold11__79
PGA_scaffold12__71
PGA_scaffold13__52
PGA_scaffold14__91
PGA_scaffold15__101
PGA_scaffold16__33
PGA_scaffold17__51
PGA_scaffold1__77
PGA_scaffold18__69
PGA_scaffold2__36
PGA_scaffold3__111
PGA_scaffold4__129
PGA_scaffold5__109
PGA_scaffold6__104
PGA_scaffold7__69
PGA_scaffold8__63
PGA_scaffold9__45

为什么第 9 行和第 10 行似乎有问题?

期望的输出:

PGA_scaffold10__49
PGA_scaffold11__79
PGA_scaffold12__71
PGA_scaffold13__52
PGA_scaffold14__91
PGA_scaffold15__101
PGA_scaffold16__33
PGA_scaffold17__51
PGA_scaffold18__69
PGA_scaffold1__77
PGA_scaffold2__36
PGA_scaffold3__111
PGA_scaffold4__129
PGA_scaffold5__109
PGA_scaffold6__104
PGA_scaffold7__69
PGA_scaffold8__63
PGA_scaffold9__45

如果我将代码修改为仅打印前三个字段,则排序将符合我的预期:

输入:awk -F"_" '{print $1"_"$2"_"$3}' sort_test.txt | sort

输出:

PGA_scaffold1_
PGA_scaffold10_
PGA_scaffold11_
PGA_scaffold12_
PGA_scaffold13_
PGA_scaffold14_
PGA_scaffold15_
PGA_scaffold16_
PGA_scaffold17_
PGA_scaffold18_
PGA_scaffold2_
PGA_scaffold3_
PGA_scaffold4_
PGA_scaffold5_
PGA_scaffold6_
PGA_scaffold7_
PGA_scaffold8_
PGA_scaffold9_

因此,似乎第四个字段影响了排序,但不清楚原因。

问题是,我需要初始排序,但第 9 行和第 10 行交换了。

是否有人对为什么会发生这样的排序以及如何修改它以产生预期的输出有任何想法?

【问题讨论】:

  • 请将该示例输入的所需输出(无描述)添加到您的问题(无评论)。
  • 你真的希望 9 和 10 交换吗? PGA_scaffold1__77 不应该在开头,就像它只有 3 个字段的版本一样吗?
  • 仅供参考,我无法在 MacOS High Sierra 上重现它,但我在 Debian Linux 上重现了它。
  • 这不是一个真正的编程问题,而是一个关于 Linux sort 命令如何工作的问题。 Unix & Linux 会是一个更好的地方。
  • @Barmar - 我正在尝试匹配在伴随文件上实现的排序。使用bedtools sort 对 GFF 文件进行排序,文件按照我最初帖子中“所需输出”的方式排序。

标签: bash sorting


【解决方案1】:

非常感谢@Barmar 将我带到Unix & Linux 论坛!

我设法在这篇文章中间接找到了我的问题的答案:

Is gnu coreutils sort broken?

解决方案是更改我的语言环境!

我的语言环境如下所示:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

运行后:

$ export LC_COLLATE=C

我能够得到我想要的排序输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2019-06-14
    • 2021-10-15
    • 2012-05-12
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多