【问题标题】:How to sort groups of lines together?如何将多组线排序在一起?
【发布时间】:2013-09-14 19:47:15
【问题描述】:

我有这个文件:

rs1    1    ADD     0.7     0.75     0.45
rs1    1    VAR     0.4     4.53     0.06
rs1    1    USER    NA      1.96     0.37
rs2    2    ADD     1.5     0.25     0.23
rs2    2    VAR     0.4     4.86     0.03
rs2    2    USER    NA      1.73     0.05
rs3    3    ADD     0.29    0.76     0.97
rs3    3    VAR     0.44    3.95     0.09
rs3    3    USER    0.96    5.41     0.01

对于$1 中的每个值,在$3 中有ADDVARUSER 三行。我想根据$6USER$3 中的行的值对文件进行排序(反向排序)。问题是我怎么能做到这一点,同时在排序后的行旁边保留ADDVAR 的相应行。我不需要对其他两行进行排序;我只需要它们位于sorted 行旁边。

期望的输出:

 rs3    3    ADD     0.29    0.76    0.97
 rs3    3    VAR     0.44    3.95    0.09
 rs3    3    USER    0.96    5.41    0.01
 rs2    2    ADD     1.5     0.25    0.23
 rs2    2    VAR     0.4     4.86    0.03
 rs2    2    USER    NA      1.73    0.05
 rs1    1    ADD     0.7     0.75    0.45
 rs1    1    VAR     0.4     4.53    0.06
 rs1    1    USER    NA      1.96    0.37

我试过这段代码,但它只根据USER 行中的$6 值排序:

cat File | sort -k1 | uniq | sort -g -k6 > Output

谢谢

【问题讨论】:

  • +1 用于格式正确的问题,包含示例数据、所需输出和...喘气,...示例代码; -) 。您可以指定多个键进行排序。 -k2 -k3 -k6 可能有用。祝你好运。
  • 看看这个例子,我相信它与我相信stackoverflow.com/questions/3832068/…的思路相同
  • @shelter:不幸的是,它似乎不起作用
  • @TopGunCoder:其实我的问题和你说的有点不一样。不过这个问题很有趣。
  • 所需的输出没有按我看到的任何方式按 $6 排序。

标签: unix sorting awk


【解决方案1】:

这有点乱,但可以做你想做的事:

paste - - - < File | sort -k18,18g | xargs -n 6

输入格式的问题是 sort 无法对输入行的组进行操作,所以需要将每组变成一行,排序,然后再返回。这仅适用于输入“USER”行始终位于组中的最后一行。

【讨论】:

    【解决方案2】:

    这是 Ruby 的单行代码 :)

    ruby -e 'File.open(ARGV.shift).readlines.entries.group_by{|e| e.split[1]}.sort.reverse.each{|e| puts e[1]}' file
    

    输出:

    rs3    3    ADD     0.29    0.76     0.97
    rs3    3    VAR     0.44    3.95     0.09
    rs3    3    USER    0.96    5.41     0.05
    rs2    2    ADD     1.5     0.25     0.23
    rs2    2    VAR     0.4     4.86     0.03
    rs2    2    USER    NA      1.73     0.01
    rs1    1    ADD     0.7     0.75     0.45
    rs1    1    VAR     0.4     4.53     0.06
    rs1    1    USER    NA      1.96     0.37
    

    【讨论】:

    • 谢谢。我还需要用我的文件名替换第一个File 吗?你能解释一下代码吗?
    • @user2162153 您唯一需要替换的是参数file
    • 谢谢。我得到这个错误。我收到此错误:-e:1: undefined method `group_by' for #<0x2b9c906336e0>
    猜你喜欢
    • 2015-09-13
    • 1970-01-01
    • 2014-12-28
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多