Skip to main content
 首页 » 编程设计

python之倒序枚举

2025年05月04日16freeliver54

cat dummy_file 
    A   ID1   
    A   ID2    
    A   ID3 
    B   ID4 
    B   ID5 
    C   ID6 
    C   ID7 
    C   ID8 
    C   ID9 

下面的 Awk 命令按第一列对 dummy_file 项进行分组和枚举。

 awk '{count[$1]++}; {print $0"\t"count[$1]}' dummy_file 
    A   ID1  1 
    A   ID2  2 
    A   ID3  3 
    B   ID4  1 
    B   ID5  2 
    C   ID6  1 
    C   ID7  2 
    C   ID8  3 
    C   ID9  4 

如何为这样的输出反向枚举count[$1]++(以相反的顺序枚举):

    A   ID1  3 
    A   ID2  2 
    A   ID3  1 
    B   ID4  2 
    B   ID5  1 
    C   ID6  4 
    C   ID7  3 
    C   ID8  2 
    C   ID9  1 

请您参考如下方法:

如果输入文件确实在第一列上排序,如您在示例中所示,并且您想要“第一列的索引号以降序排列”,则:

awk ' 
   (NR==FNR) { occured[$1]++ ; next ; }  
             {print $0,occured[$1]--; } 
    ' dummy_file dummy_file 

这是一个很常见的“双循环”,即我们读取文件两次,并使用“NR==FNR”区分第一遍。

上面的 awk 程序:1) 在第一遍中,增加(默认为 0)第一列中每个事物的出现次数。并跳过其余部分以转到下一行。 2)第二次传递同一文件:输出该行,在其后添加第一列的“剩余出现次数”。

给定 OP 的当前示例文件,此输出:

$ awk ' 
      (NR==FNR) { occured[$1]++ ; next ; }  
                {print $0,occured[$1]--; } 
      ' dummy_file dummy_file 
 
A   ID1 3 
A   ID2 2 
A   ID3 1 
B   ID4 2 
B   ID5 1 
C   ID6 4 
C   ID7 3 
C   ID8 2 
C   ID9 1 

可以根据需要调整输出的实际呈现方式,以保持/简化/更改间距等。