![파일 내 발생별 번호 [닫기]](https://linux55.com/image/112730/%ED%8C%8C%EC%9D%BC%20%EB%82%B4%20%EB%B0%9C%EC%83%9D%EB%B3%84%20%EB%B2%88%ED%98%B8%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
아래에 파일이 있습니다. 두 번째와 네 번째 결합된 필드의 발생 횟수에 따라 첫 번째 필드의 번호를 다시 매겨야 합니다. 세 번째와 다섯 번째 필드는 관련이 없습니다. 아이디어? 입력 파일은 다음 순서로 정렬됩니다.
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;
}'