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

时间:2015-10-15 17:00:53

标签: perl awk text-processing

我想重整整个文件。

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

3 个答案:

答案 0 :(得分:2)

这将维持每个分组中行的顺序:

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

答案 1 :(得分:1)

sort -k1,2 file.txt

产生

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

答案 2 :(得分:1)

为此,最好使用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