결과

결과

다음 내용이 포함된 파일이 있습니다.

red dog  
red cat  
red bird  
red horse  
blue hamster  
blue monkey  
blue lion  
pink pony  
pink whale  
pink pig  
pink dolphin 

각 색상에 대한 카운터를 증가시킨 다음 각 동물에 대한 카운터를 증가시켜야 합니다. 따라서 빨간색은 1, 파란색은 2, 분홍색은 3입니다. 다음으로 개, 고양이, 새, 말은 1, 2, 3, 4가 됩니다. 새로운 색상으로 시작해야 하므로 햄스터가 1부터 다시 시작해야 합니다.

해당 파일에서 "색상 동물을 동시에 읽기"를 수행하면 색상이 더 이상 이전 색상과 같지 않을 때 어떻게 비교할 수 있습니까?

나는 다음과 같은 것을 찾고 있습니다 :

1.1  
1.2  
1.3  
1.4  
2.1  
2.2  
2.3  
3.1  
3.2  
3.3  
3.4  

어떤 제안이라도 크게 감사하겠습니다 :)

답변1

이 같은 awk:

$ awk '$1 != c { cc++; c=$1; ac=0; a="" } $2 != a { ac++; a=$2 } { printf("%d.%d\n", cc, ac) }' file
1.1
1.2
1.3
1.4
2.1
2.2
2.3
3.1
3.2
3.3
3.4

스크립트 awk는 다음 네 가지를 추적합니다.

  1. 최근에 읽은 동물의 이름, a.
  2. 가장 최근에 읽은 색상은 c.
  3. "동물 카운터", ac.
  4. "색상 카운터", cc.

두 입력 열의 내용을 기반으로 이러한 변수를 업데이트합니다.

  • 가장 최근에 읽은 색상과 색상이 다른 경우 증가시켜 cc기억하세요.이것대신 색상을 지정합니다. 또한 재설정 aca.
  • 동물이 지난번 읽었던 것과 다르다면 추가해서 ac기억하세요이것대신 동물.

그런 다음 input 의 각 줄에 대한 합계를 인쇄합니다 cc.ac

각 행의 동물이 고유하다는 것을 보장한다면 이 a변수를 제거할 수 있습니다.

답변2

perl -pale '$_ = join ".", reverse ++$h{$F[0]}, scalar keys %h'

해시는 언제든지 키 수를 %h저장 keyA => count하고 반환합니다. scalar keys %h그런 다음 결과를 반전하고 쉼표로 연결합니다.

결과

1.1
1.2
1.3
1.4
2.1
2.2
2.3
3.1
3.2
3.3
3.4

관련 정보