使用 Unix 和 Awk 根据一列对文件进行排序

使用 Unix 和 Awk 根据一列对文件进行排序

我需要根据第六列(即分数)对输入文件进行排序。

输入文件:

Sc2/80  20 . A T 86 Pass N=2 F=5;U=4
Sc2/80  20 . A C 80 Pass N=2 F=5;U=4
Sc2/60  55 . G T 90 Pass N=2 F=5;U=4
Sc2/60  55 . G C 99 Pass N=2 F=5;U=4
Sc2/20  39 . C T 97 Pass N=2 F=5;U=4
Sc2/20  39 . C A 99 Pass N=2 F=5;U=4

预期输出:

Sc2/20 39 . C T 97 Pass N=2 F=5;U=4
Sc2/20 39 . C A 99 Pass N=2 F=5;U=4
Sc2/60 55 . G T 90 Pass N=2 F=5;U=4
Sc2/60 55 . G C 99 Pass N=2 F=5;U=4
Sc2/80 20 . A T 86 Pass N=2 F=5;U=4
Sc2/80 20 . A C 80 Pass N=2 F=5;U=4

逻辑:对输入文件的所有偶数行进行比较,并根据分数(降序)进行排序,并打印文件中相应的奇数行。如果任何(偶数行)的分数相等,那么我们需要查看相应奇数行的分数,因此,较高的分数优先并首先打印。

答案1

一种可能的解决方案是将每两行放在一起,排序,然后再次拆分连接的行

awk '{ getline line; print $0, line }' input_file | 
    sort -k6,6nr -k15,15nr | 
    awk '{ $10 = "\n" $10; print }'

相关内容