Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在表格文件中对块进行排序 我想对第1列中的文件A进行排序,保留空行并从上到下出现值。_Linux_Perl_Awk - Fatal编程技术网

Linux 在表格文件中对块进行排序 我想对第1列中的文件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

我有一个表格文件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 -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;nr
sort
对文件中的行进行排序。这就是它所做的一切。您正在寻找对文本块进行排序的东西。
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]
        }
    }
}