对表格文件中的块进行排序

sort blocks in tabular file

我想根据第 1 列对文件 A 进行排序,保留空行并从上到下出现值。

我有一个表格文件 A:

seq1 5 15  
seq1 20 34  

seq1 50 48  
seq1 45 36  

seq2 17 20  

seq1 55 75  
seq1 80 84  

seq2 30 48  
seq2 55 66

seq3 27 40  

我想得到如下输出:

seq1 5 15  
seq1 20 34  

seq1 50 48  
seq1 45 36  

seq1 55 75  
seq1 80 84 

seq2 17 20  

seq2 30 48  
seq2 55 66

seq3 27 40  

应保留空白行。

我试过使用 sort,但它会删除空行并且不会保持从上到下的顺序。

sort -k1,1 fileA.txt

谁能指出我在这里遗漏了什么?

非常感谢。

使用 GNU awk 进行排序和二维数组:

$ cat tst.awk         
BEGIN { RS=""; ORS="\n\n" }
{ rec[][++cnt[]] = [=10=] }
END {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    for (key in rec) {
        for (nr=1; nr <= cnt[key]; nr++) {
            print rec[key][nr]
        }
    }
}
$ 
$ gawk -f tst.awk file
seq1 5 15
seq1 20 34

seq1 50 48
seq1 45 36

seq1 55 75
seq1 80 84

seq2 17 20

seq2 30 48
seq2 55 66

seq3 27 40

您至少需要 gawk 4.0 版。

对于数字排序:

BEGIN { RS=""; ORS="\n\n" }
{ key=gensub(/^[^[:digit:]]+/,"","",); rec[key][++cnt[key]] = [=11=] }
END {
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (key in rec) {
        for (nr=1; nr <= cnt[key]; nr++) {
            print rec[key][nr]
        }
    }
}