사실 이것은 이전에 정리해 두었던 "awk에서 출력할 위치(필드)를 변수로 지정하기"와 같은 종류의 내용이나, 개인적으로 실제 활용에서 혼동하는 경우가 간혹 있기에 별도로 정리해 두기로.
셸에서 사용하던 변수를 awk 내부 변수로 복사하기 위해 -v 옵션을 사용하는 방식이며, 여기서 기억할 점은 문자열을 그대로 출력할 것이기 때문에 awk 내부 변수에서 "$" 표시를 붙이지 말아야 한다는 점이다. 아래의 예시를 보자. my_file.txt 파일의 내용을 출력할 때, 각 행 앞에 셸 변수 str_var에 할당된 문자열(my_file:)을 삽입하고 탭(tab)으로 구분하는 경우다.
str_var="my_file:"
awk -v header_str="$str_var" '{ print header_str "\t" $0 }' my_file.txt
-v 옵션으로 awk 내부 변수 header_str을 정의하고 여기에 str_var에 할당된 문자열을 복사했다. awk의 print 명령에 인자로 사용된 header_str 변수 앞에 "$" 표시가 없음에 유의. 스크립트를 작성하다 보면 무의식적으로 변수 앞에 "$" 표시를 붙이다가 위와 같이 문자열을 awk 내부 변수에 할당해서 활용할 때 실수를 하는 경우가 있다.
셸에서 사용하던 변수를 awk 내부 변수로 복사하기 위해 -v 옵션을 사용하는 방식이며, 여기서 기억할 점은 문자열을 그대로 출력할 것이기 때문에 awk 내부 변수에서 "$" 표시를 붙이지 말아야 한다는 점이다. 아래의 예시를 보자. my_file.txt 파일의 내용을 출력할 때, 각 행 앞에 셸 변수 str_var에 할당된 문자열(my_file:)을 삽입하고 탭(tab)으로 구분하는 경우다.
str_var="my_file:"
awk -v header_str="$str_var" '{ print header_str "\t" $0 }' my_file.txt
-v 옵션으로 awk 내부 변수 header_str을 정의하고 여기에 str_var에 할당된 문자열을 복사했다. awk의 print 명령에 인자로 사용된 header_str 변수 앞에 "$" 표시가 없음에 유의. 스크립트를 작성하다 보면 무의식적으로 변수 앞에 "$" 표시를 붙이다가 위와 같이 문자열을 awk 내부 변수에 할당해서 활용할 때 실수를 하는 경우가 있다.







덧글