【问题标题】:How to sort a text file with awk? [duplicate]如何使用 awk 对文本文件进行排序? [复制]
【发布时间】:2016-01-14 06:08:51
【问题描述】:

我想重新排序整个文件。

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

【问题讨论】:

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

标签: perl awk text-processing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      sort -k1,2 file.txt

      生产

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

      【讨论】:

      • 第 5 行必须是:2 11,第 6 行必须是:2 10
      • @HamedGhadimi sort -k1n -s file.txt
      • @HamedGhadimi - 我不明白为什么“2 11”应该在“2 10”之前
      • @JoseRicardoBustosM。谢谢它有效。
      • @ChrisKoknat 这似乎是一个索引系列。所以重点是先按照它们现在的顺序获取所有1条目,然后是所有2条目,按照它们现在的顺序接下来...
      猜你喜欢
      • 1970-01-01
      • 2019-10-23
      • 2020-09-08
      • 2019-09-30
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多