awk를 사용하여 열의 식별자를 기반으로 연속 행에서 두 숫자 빼기

awk를 사용하여 열의 식별자를 기반으로 연속 행에서 두 숫자 빼기

Bash를 배우고 있는데 텍스트 파일에서 데이터를 추출하는 데 문제가 있습니다. "awk"를 사용할 수 있다는 것은 알지만 어떻게 사용하는지 모르겠습니다...

다음 데이터를 두 개의 열로 구성했습니다.

8.044   FIX
9.326   3 the
18.726  blank
20.742  FIX
63.624  FIX
64.89   3 house
73.656  TEST

두 번째 열의 식별자를 기반으로 첫 번째 열에 표시된 숫자를 빼고 싶습니다. 두 번째 열의 "3"은 내 식별자이고 다음 행은 내가 빼려는 숫자입니다. 따라서 다음과 같아야 합니다.

18.726 - 9.326
73.656 - 64.89

출력은 다음과 같이 세 개의 열이 있는 텍스트 파일에 있어야 합니다.

9.326 9.4 1
64.89 8.766 1

어떤 도움이라도 대단히 감사하겠습니다! 미리 감사드립니다!

답변1

노력하다:

awk '$2=="3"{out=1;last=$1;next}out{print last,$1-last,1;out=0}' infile

답변2

파일의 줄을 바꾸면 awk 코드가 더 쉽습니다.

tac file | awk '$2 == "3" {print $1, prev - $1, 1} {prev = $1}' | tac
9.326 9.4 1
64.89 8.766 1

"3"이 줄의 마지막에 나타나면 두 번째 값은 첫 번째 값의 부정 값이 됩니다. "prev" 변수는 비어 있고 awk는 빼기에서 값 0을 사용합니다.

관련 정보