![awk를 사용하여 열의 식별자를 기반으로 연속 행에서 두 숫자 빼기](https://linux55.com/image/210739/awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%B4%EC%9D%98%20%EC%8B%9D%EB%B3%84%EC%9E%90%EB%A5%BC%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%EC%97%B0%EC%86%8D%20%ED%96%89%EC%97%90%EC%84%9C%20%EB%91%90%20%EC%88%AB%EC%9E%90%20%EB%B9%BC%EA%B8%B0.png)
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을 사용합니다.