Linux 在表格文件中对块进行排序 我想对第1列中的文件A进行排序,保留空行并从上到下出现值。
我有一个表格文件a:Linux 在表格文件中对块进行排序 我想对第1列中的文件A进行排序,保留空行并从上到下出现值。,linux,perl,awk,Linux,Perl,Awk,我有一个表格文件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 se
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 -k1,1 fileA.txt
有人能指出我遗漏了什么吗
非常感谢。使用GNU awk进行排序和2D阵列:
$ cat tst.awk
BEGIN { RS=""; ORS="\n\n" }
{ rec[$1][++cnt[$1]] = $0 }
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
$cat tst.awk
开始{RS=”“;ORS=“\n\n”}
{rec[$1][++cnt[$1]]=$0}
结束{
PROCINFO[“排序在”]=“@ind\u str\u asc”
用于(输入rec){
for(nr=1;nrsort
对文件中的行进行排序。这就是它所做的一切。您正在寻找对文本块进行排序的东西。sort
不能这样做,因为它是基于行的,但是awk
可以,因为awk是基于记录的,而不是基于行的。在awk3.1上,这将工作awk-vRS='{a[$0]}END{ORS=“\n\n;x=asorti(a);对于(i=1;IMONE谢谢。两个GAWK和AWK都很好。我能像SEQ1、SEQ2、SEQ3……而不是SEQ1、SEQ11、SEQ2、SEQ222……吗?是的,我添加了一个例子。这个解决方案只在GAWK中工作,而不是其他AWK。块之间的空行包含3个空间,而不是只有一个空间。如何删除额外的空间。ant只有一个空格。我不知道这是什么意思。如果你已经发布的内容是错误的,请更新你的问题以提供正确的输入,
BEGIN { RS=""; ORS="\n\n" }
{ key=gensub(/^[^[:digit:]]+/,"","",$1); rec[key][++cnt[key]] = $0 }
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (key in rec) {
for (nr=1; nr <= cnt[key]; nr++) {
print rec[key][nr]
}
}
}