IT/네이버지식인

[지식인]awk 명령어 질문입니다

송시 2022. 5. 28. 23:49
728x90

awk 를 사용하다 보면 환경변수를 사용하게 되는 순간도 오는데 그에 대한 답변이다.

 

이 질문에는 내 답변이 채택되지는 않았고, 채택되신 분의 답변이 훨씬 더 간단하고 보기에도 좋지만, 그래도 이런 방법도 있다는 차원에서 참고할만 하다.

 

질문

 

현재 file.txt에

 
170 A
165 B
140 C
130 D
120 E
100 F
 
이렇게 정렬되어 있습니다.
 
그 전에 변수 max 를 170으로 설정하였습니다.
 
그렇다면, 이 파일에서 170에 해당하는 레코드를 출력하는 방법은
 
$awk '$1 == $max {print $0}' file.txt 아닌가요?
첫번째 필드들 중에서 max(170)에 해당하는 값이 나오게 하고싶은데 아무것도 출력되지않아요 ㅠㅠ
 
awk 명령어에 대해서 공부하고싶은데 많이 어렵네요.. 도와주실분 구합니다 ㅠ.ㅠ

 

답변

$max 는 질문에 나와있는 것 처럼 변수에 저장하였다고 합니다.

이 의미는 아마 환경변수였을 것 같네요.

awk '$1 == $max {print $0}' file.txt

에서 $1과 $0 은 awk 에서 정해져서 사용하는 변수명입니다.

그런데 $max 변수는 awk 와 아무런 상관이 없습니다.

외부의 환경변수를 awk 내에서 사용하고자 할 때에는

큰따옴표 작은따옴표 큰따옴표

"'"$max"'" 로 감싸서 사용하면됩니다

awk '$1 == "'"$max"'" {print $0}' file.txt

또는 아래처럼 사용 가능합니다.

awk '$1 == max {print $0}' max=170 file.txt

참고한 링크

https://knight76.tistory.com/entry/awk%EC%97%90%EC%84%9C-%EC%84%9C%EB%B2%84-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%9D%BD%EC%96%B4%EC%98%A4%EA%B8%B0

 

 

** 채택된 답변

max=170 awk -v max=$max '$1 == max {print $0}' file.txt

-v 옵션으로 awk 에서 사용할 변수를 지정하면 됩니다.

728x90