반달가면 이글루에서 백업 - 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
필요에 따라 특정 위치의 문자열을 가져와서 작업해야 할 경우 아주 요긴하게 사용할 수 있다.
'bash script' 카테고리의 다른 글
[bash: grep] 문자열 검색후 일치하는 부분만 골라서 출력하기 (0) | 2023.04.17 |
---|---|
[bash: grep] 한글 문자열 검색 (0) | 2023.04.17 |
[bash: readlink] 상대경로를 절대경로로 바꾸기 (0) | 2023.04.17 |
[bash: for, case] 인자(argument) 처리 (0) | 2023.04.17 |
[bash: tr, sed] txt 파일에서 여러줄로 된 항목을 한줄로 바꾸기 - 2 (2) | 2023.04.13 |