对表格文件中的块进行排序
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]
}
}
}
我想根据第 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]
}
}
}