我有这个文件:
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
Run Code Online (Sandbox Code Playgroud)
对于中的每个值$1,有三行ADD,VAR,USER在$3.我想根据$6带有USERin的行的值对文件进行排序(反向排序)$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
Run Code Online (Sandbox Code Playgroud)
我尝试过这段代码,但它只根据行中的$6值进行排序USER:
cat File | sort -k1 | uniq | sort -g -k6 > Output
Run Code Online (Sandbox Code Playgroud)
谢谢
这有点乱,但做你想要的:
paste - - - < File | sort -k18,18g | xargs -n 6
Run Code Online (Sandbox Code Playgroud)
输入格式的问题是sort无法对输入行组进行操作,因此您需要将每个组转换为一行,对其进行排序,然后将其转回.仅当输入"USER"行始终位于组中的最后一行时,此选项才有效.