열의 값이 변경되면 간격을 계산합니다.

열의 값이 변경되면 간격을 계산합니다.

저는 코딩에 익숙하지 않지만 제 직업상 텍스트 파일을 처리해야 하는데, 제가 겪고 있는 문제에 대해 도움이 필요합니다.

몇 가지 숫자가 포함된 두 개의 열이 있는 파일이 있습니다.

180.000000   115.944480
180.000000    95.979157 
180.000000    93.583322 
178.593750   122.797168 
178.593750   120.000000 
178.593750   117.279613 
178.593750   102.024699 
178.593750    99.594068
   ...           ...

두 번째 열에는 첫 번째 열의 고유 값과 연결된 여러 값이 있습니다. 이제 열 1의 각 고유 값에 대해 열 2의 값 간격을 인쇄하려고 합니다.

원하는 출력:

115.944480 93.583322
122.797168 99.594068
...

당연히 1열의 값이 바뀌면 그 값을 저장해야 하고, 2열의 이전 값과 가장 최근 값을 출력해야 합니다. 하지만 문제는 다음과 같습니다. bash나 awk에서 이 작업을 수행하는 방법은 무엇입니까?

답변1

Awk초기 조건에 대한 솔루션"열 1의 각 고유 값에 대해 열 2의 값 사이의 간격"(당신의 상황이 많이 바뀌었기 때문에):

awk 'NR > 1{ 
         if ($1 == num1) intvl += num2 - $2;
         else { print intvl; intvl = 0 }
    }
    { num1 = $1; num2 = $2 }
    END{ print intvl }' file

예제 출력:

22.3612
23.2031

두 번째 조건 충족"1열의 값이 변경되면 2열의 이전 값과 가장 최근 값을 인쇄합니다.":

awk '!a[$1]++{ 
         if (first != "") { print first, last; first = last = "" }
         first = $2
     }
     { last = $2 }
     END{ print first, last }' file

산출:

115.944480 93.583322
122.797168 99.594068

관련 정보