首页 > 解决方案 > 按 2 行为一组对文本文件进行排序

问题描述

我有一个具有以下结构的文件:

A   35  74  dsadasd/1   0   +
A   95  74  dsadasd/2   0   -
B   75  159 dsadasd/2   0   +
B   78  852 dsadasd/1   0   -
C   12  789 dsadasd/1   0   +
C   91  546 dsadasd/2   0   -
A   87  52  dsadasd/2   0   +
A   52  15  dsadasd/1   0   - 

我想按两行两行一组的第四个字段(基本上是按最后一个数字排序)对其进行排序,以输出以下结果:

A   35  74  dsadasd/1   0   +
A   95  74  dsadasd/2   0   -
B   78  852 dsadasd/1   0   -
B   75  159 dsadasd/2   0   +
C   12  789 dsadasd/1   0   +
C   91  546 dsadasd/2   0   -
A   52  15  dsadasd/1   0   - 
A   87  52  dsadasd/2   0   +

TIA

标签: sortingawksed

解决方案


在 awk 中:

$ awk  '{
    k=NR%2; a[k]=$4; b[k]=$0                     # store compare value and 
}                                                #      record for 0 and 1
!(NR%2) {                                        # on even we compare
    print b[(a[0]>a[1])] ORS b[(a[0]<=a[1])]     # and print the smaller first
}' file
A   35  74  dsadasd/1   0   +
A   95  74  dsadasd/2   0   -
B   78  852 dsadasd/1   0   -
B   75  159 dsadasd/2   0   +
C   12  789 dsadasd/1   0   +
C   91  546 dsadasd/2   0   -
A   52  15  dsadasd/1   0   - 
A   87  52  dsadasd/2   0   +

推荐阅读