【发布时间】:2020-12-30 19:04:52
【问题描述】:
我有一个如下所示的文件:
2836344588 ... ... N fs1q
2836344589 ... ... N fp2q
2836374222 ... ... N fp3q
2836374223 ... ... N fp6q
2836374224 ... ... N fp7q
2836384836 ... ... N fs2q
2836384837 ... ... N fp1q
2836384838 ... ... N fp4q
2836384839 ... ... N fp5q
2836384957 ... ... N fs3q
2836384958 ... ... N fs7q
2836404416 ... ... N fs5q
2836414186 ... ... N fs6q
2836434267 ... ... N fs4q
我想按第五列的第二个和第三个字符排序:第二个字符的排序应该按字母倒序进行(s 应该在p 之前)并按第三个字符排序应该以常规(即不颠倒的)数字顺序完成。
我认为我可以通过以下方式实现:
sort -k5.2r -k5.3n
但这会导致:
2836384958 ... ... N fs7q
2836414186 ... ... N fs6q
2836404416 ... ... N fs5q
2836434267 ... ... N fs4q
2836384957 ... ... N fs3q
2836384836 ... ... N fs2q
2836344588 ... ... N fs1q
2836374224 ... ... N fp7q
2836374223 ... ... N fp6q
2836384839 ... ... N fp5q
2836384838 ... ... N fp4q
2836374222 ... ... N fp3q
2836344589 ... ... N fp2q
2836384837 ... ... N fp1q
其中第五列第三个字符的排序也是相反的。
如何对该文件进行排序,以便反向排序仅发生在第二个字符上(所有 's' 行都在所有 'p' 行之前)而不是第三个字符?换句话说,我如何得到这个期望的输出:
2836344588 ... ... N fs1q
2836384836 ... ... N fs2q
2836384957 ... ... N fs3q
2836434267 ... ... N fs4q
2836404416 ... ... N fs5q
2836414186 ... ... N fs6q
2836384958 ... ... N fs7q
2836384837 ... ... N fp1q
2836344589 ... ... N fp2q
2836374222 ... ... N fp3q
2836384838 ... ... N fp4q
2836384839 ... ... N fp5q
2836374223 ... ... N fp6q
2836374224 ... ... N fp7q
非常感谢。
【问题讨论】:
-
Man 条目说“其余的修饰符适用于整个关键字段,无论它们是否仅与 field1 或 field2 或两者一起指定。”所以我认为默认情况下反向将适用于所有方面。