【发布时间】: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 文件进行排序,文件按照我最初帖子中“所需输出”的方式排序。