将一列升序排序,另一列降序

Mat*_*nes 8 sort

奇怪的是,我可能的意思是这是预期的行为,但我不明白为什么,也不明白如何解决它。

任务是根据第 5 列排序,然后是第 4 列。

grep -w RockDoveHPG_Transcript_21  xaa.blast| sort  -gk5,5 -gk4,4
Run Code Online (Sandbox Code Playgroud)

这给了我

RockDoveHPG_Transcript_21   XM_004941221.2  70.588  17  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  82.353  17  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  68.182  22  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  80.000  25  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  57.692  26  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  70.588  34  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  100.000 77  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  77.778  18  2.46e-80
RockDoveHPG_Transcript_21   XM_004941221.2  89.474  19  2.46e-80
RockDoveHPG_Transcript_21   XM_004941221.2  70.000  20  2.46e-80
RockDoveHPG_Transcript_21   XM_004941221.2  71.429  21  2.46e-80
RockDoveHPG_Transcript_21   XM_004941221.2  72.000  25  2.46e-80
RockDoveHPG_Transcript_21   XM_004941221.2  72.727  33  2.46e-80
RockDoveHPG_Transcript_21   XM_004941221.2  94.737  76  2.46e-80
...
RockDoveHPG_Transcript_21   XM_004941221.2  78.947  19  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  71.429  21  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  83.544  79  1.56e-43
Run Code Online (Sandbox Code Playgroud)

第 5 列的排序很好,但理想情况下,我希望第 4 列从高到低排序。现在从低到高。啊,听起来我需要-r旗帜..

grep -w RockDoveHPG_Transcript_21  xaa.blast| sort  -gk5,5 -r -gk4,4
Run Code Online (Sandbox Code Playgroud)

现在第 5 列按相反方向排序,但第 4 列很好。

RockDoveHPG_Transcript_21   XM_004941221.2  83.544  79  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  71.429  21  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  78.947  19  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  68.750  16  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  86.667  15  1.56e-43
RockDoveHPG_Transcript_21   XM_004941221.2  85.526  76  6.22e-44
...
RockDoveHPG_Transcript_21   XM_004941221.2  100.000 77  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  70.588  34  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  57.692  26  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  80.000  25  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  68.182  22  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  82.353  17  4.17e-86
RockDoveHPG_Transcript_21   XM_004941221.2  70.588  17  4.17e-86
Run Code Online (Sandbox Code Playgroud)

所以基本上看起来这个-r标志不是按列应用的。 反转 1 个已排序列的顺序会反转另一个的顺序。

我想要的是

RockDoveHPG_Transcript_21   XM_004941221.2  100.000 77  4.17e-86
Run Code Online (Sandbox Code Playgroud)

在顶部返回,我认为这应该通过将 Col5 从低到高排序,然后将 Col 4 从高到低排序来完成。

ste*_*ver 8

通过添加-r您所做的方式,它被视为全局选项。来自info sort

用“-k”指定的排序字段中的位置可以附加任何选项字母“MbdfghinRrV”,在这种情况下,该特定字段不会继承全局排序选项。

请注意短语“附加到它”,即仅反转字段 4,使用-gk4,4r


Uts*_*sav 5

grep -w RockDoveHPG_Transcript_21  xaa.blast| sort  -gk5,5 -gk4,4r
Run Code Online (Sandbox Code Playgroud)

注意r最后。

  • @MattMacManes 实际上,这并不奇怪。对于要排序的每个键,您可以将选项放在键定义之后(请参阅“手册”页)。此外,您的 `-g` 选项可以放在键后面,这样您就可以对另一个键进行不同类型的排序。所以在你的情况下最好写`sort -k5g -k4gr`(为什么这个`5,5`东西无论如何?) (3认同)