목록에 일련번호 할당

목록에 일련번호 할당

다음과 같은 줄이 포함된 파일이 있습니다.

   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             

즉, 첫 번째 열을 기준으로 내림차순으로 정렬했을 때 각 행을 순서대로 분류한 것입니다. 쉘 스크립트가 이를 수행하는 데 도움이 될 수 있는 것이 유닉스에 있습니까?

답변1

sort이는 다음을 수행하는 짧은 awk 스크립트처럼 보입니다 .

$ 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 스크립트는 첫 번째 필드를 보고 변경되었는지 확인하고 새 값이 표시된 마지막 줄 번호를 인쇄합니다.

관련 정보