将序号分配给列表

将序号分配给列表

我有一个包含如下行的文件:

   8 GeodeticCorrosiveness-4096     
   8 MetricalDrosky-4096            
   8 UncontrovertiblePhoebus-4096   
   9 FlabbyAutochthones-4096        
   9 UndispensedCreeds-4096         
   9 WaltonianAtomicities-4096      
  10 AtheismDuumvirate-4096         
  10 HeliocentricAllative-4096      
  10 HepaticPhaedra-4096            
  11 High-speedBuchan-4096       

我想制作这样的东西:

8   8 GeodeticCorrosiveness-4096     
8   8 MetricalDrosky-4096            
8   8 UncontrovertiblePhoebus-4096   
5   9 FlabbyAutochthones-4096        
5   9 UndispensedCreeds-4096         
5   9 WaltonianAtomicities-4096      
2  10 AtheismDuumvirate-4096         
2  10 HeliocentricAllative-4096      
2  10 HepaticPhaedra-4096            
1  11 High-speedBuchan-4096             

即,按第一列降序排序时每行的序数分类。 unix 中有什么可以帮助 shell 脚本做到这一点吗?

答案1

这看起来像是一个简短的 awk 脚本,sort可以执行以下操作:

$ sort -srn file.txt | awk '{if ($1 != prev) num=NR; print num, $0; prev=$1}' | sort -srn
8    8 GeodeticCorrosiveness-4096     
8    8 MetricalDrosky-4096            
8    8 UncontrovertiblePhoebus-4096   
5    9 FlabbyAutochthones-4096        
5    9 UndispensedCreeds-4096         
5    9 WaltonianAtomicities-4096      
2   10 AtheismDuumvirate-4096         
2   10 HeliocentricAllative-4096      
2   10 HepaticPhaedra-4096            
1   11 High-speedBuchan-4096  

两个调用sort首先对列表进行排序,最后反转,而 awk 脚本只是查看第一个字段以确定它是否已更改,并打印看到新值的最后一个行号。

相关内容