저는 코딩에 익숙하지 않지만 제 직업상 텍스트 파일을 처리해야 하는데, 제가 겪고 있는 문제에 대해 도움이 필요합니다.
몇 가지 숫자가 포함된 두 개의 열이 있는 파일이 있습니다.
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