如何用awk对文本文件进行排序?

问题描述:

我想对整个文件重新排序。如何用awk对文本文件进行排序?

file.txt的是这样的:

 
1 10 
1 10 
2 10 
1 11 
2 11 
2 10 

我想它看起来就像这样:

 
1 10 
1 10 
1 11 
2 10 
2 11 
2 10 
+2

为什么不在bash中使用'sort'命令? –

sort -k1,2 file.txt

产生

1 10 
1 10 
1 11 
2 10 
2 10 
2 11 
+0

第5行必须是:2 11和第6行必须是:2 10 –

+0

@HamedGhadimi'sort -k1n -s file.txt' –

+0

@HamedGhadimi - 我不明白为什么“2 11”应该在“2 10”之前, –

因为这是最好使用sort命令

sort -k1n -s file.txt 

使用Gnu-awk 4另一种解决方案,Controlling Scanning

gawk ' 
{d[$1][length(d[$1])+1]=$0} 
END{ 
    PROCINFO["sorted_in"] = "@val_num_asc"; 
    for(key in d){ 
     for(i=1; i<=length(d[key]); ++i) { 
      print d[key][i] 
     } 
    } 
}' file.txt 

你,

 
1 10 
1 10 
1 11 
2 10 
2 11 
2 10 

这将每个分组内保持线路的顺序:

perl -ane ' 
    push @{$lines{$F[0]}}, $_; 
    } { 
    print join "", map {join "", @{$lines{$_}}} sort keys %lines; 
' <<END 
1 a 
2 a 
1 b 
1 a 
2 c 
2 b 
END 
1 a 
1 b 
1 a 
2 a 
2 c 
2 b