파일 내 발생별 번호 [닫기]

파일 내 발생별 번호 [닫기]

아래에 파일이 있습니다. 두 번째와 네 번째 결합된 필드의 발생 횟수에 따라 첫 번째 필드의 번호를 다시 매겨야 합니다. 세 번째와 다섯 번째 필드는 관련이 없습니다. 아이디어? 입력 파일은 다음 순서로 정렬됩니다. sort -t',' -k2,2n -k4,4 -k5,5rn

입력하다:

1,01053,11315,ABC,-38,Sin  
1,01053,11315,ABC,-88,Sin  
1,01053,11315,CDE,-114,Sin  
1,2003700,11314,ABC,-1,Sin  
1,2003700,11314,CDE,-44,unit  
1,2003700,11314,CDE,-72,unit  
1,2003700,11314,CDE,-694,Sin

내가 원하는 출력:

1,01053,11315,ABC,-38,Sin  
2,01053,11315,ABC,-88,Sin  
1,01053,11315,CDE,-114,Sin  
1,2003700,11314,ABC,-1,Sin  
1,2003700,11314,CDE,-44,unit  
2,2003700,11314,CDE,-72,unit  
3,2003700,11314,CDE,-694,Sin  

답변1

파일은 두 번째와 네 번째 필드를 기준으로 정렬되므로 순차적으로 번호가 매겨진 줄이 연속되어야 합니다. 따라서 파일은 한 줄씩 처리됩니다. 행이 이전 행과 동일한 순서에 있으면 순서 번호를 늘리고, 그렇지 않으면 순서 번호를 1로 재설정합니다.

awk -F, '{
    if ($2 FS $4 == previous) i++; else i=1;
    sub(/^[^,]*/, i);
    print;
    previous = $2 FS $4;
}'

관련 정보