我有这个文件:
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
中的每个值,ADD
中有三行VAR
,USER
,$3
。我想根据$6
中USER
行的$3
值对文件进行排序(反向排序)。问题是我如何能够这样做并同时在排序的行旁边保留ADD
,VAR
的相应行。我不需要对其他两行进行排序;我只需将它们放在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
我已尝试过此代码,但只根据$6
行中的USER
值进行排序:
cat File | sort -k1 | uniq | sort -g -k6 > Output
谢谢
答案 0 :(得分:5)
这有点乱,但你做了什么:
paste - - - < File | sort -k18,18g | xargs -n 6
输入格式的问题是sort无法对输入行组进行操作,因此您需要将每个组转换为一行,对其进行排序,然后将其转回。这只适用于输入&#34; USER&#34; line总是在组中的最后一行。
答案 1 :(得分:1)
这是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