bash script2023. 4. 17. 16:41

반달가면 이글루에서 백업 - http://bahndal.egloos.com/556008

 

awk에서 실행 명령을 지정할 경우에 리눅스 셸에서 awk 명령을 처리하지 못하도록 하기 위해 보통 작은 따옴표(')를 사용하게 된다. 아래의 예시를 보자.

# my_file.txt에서 2번째 문자열(필드) 출력
awk '{ print $2 }' my_file.txt

만약 출력할 부분(필드, field)을 변수(variable)로 지정해야 할 경우에는 작은 따옴표 안으로 넣을 수가 없다. 셸에서 작은 따옴표 안에 있는 내용을 해석하지 않기 때문이다. 아래의 예시를 보면 차이를 쉽게 알 수 있다.

a=2
# 변수 a의 값 출력
echo "$a"
2
# 문자열 $a 출력(작은 따옴표 사용)
echo '$a'
$a

셸 변수(shell variable)의 값을 awk 명령 안에 적용시키고 싶다면 -v 옵션을 이용해서 셸에서 사용하던 변수값을 awk 내부 변수로 복사해 주면 된다. 아래의 예시를 보자.

a=2
# my_file.txt에서 변수 a에 지정된 위치의 문자열 출력(-v 옵션)
awk -v field_num="$a" '{ print $field_num }' my_file.txt

위의 예시를 보면 awk 내부변수 field_num을 정의하여 변수 a의 값을 복사해서 사용했다. 적용할 변수의 값이 2개 이상이라면 개수 만큼 -v 옵션을 반복해서 사용하면 된다.

x=2
y=3
# 변수 x와 y로 지정한 위치의 문자열을 출력, 출력값 사이에는 구분자 탭(\t) 삽입
awk -v field_x="$x" -v field_y="$y" '{ print $field_x "\t" $field_y }' my_file.txt

필요에 따라 특정 위치의 문자열을 가져와서 작업해야 할 경우 아주 요긴하게 사용할 수 있다.

728x90
Posted by 반달가면