bash script2023. 8. 1. 11:57

 

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

awk에서 문자열 작업을 할 때, 한 행의 문자열을 분할해서 배열에 저장할 수 있다. 예를 들어 한 문장이 있을 때 단어별로 쪼개서 배열의 원소로 저장하는 경우다. awk에서 제공하는 split 함수를 이용하면 된다. split 함수의 형식은 아래와 같다.

split(문자열, 배열 이름, 구분자)

예를 들어 입력 받은 행($0)을 콜론(:) 기준으로 분할해서 배열 arr에 저장하고자 한다면 아래와 같이 된다.

split($0, arr, ":")

배열의 원소번호(index)는 1부터 시작한다. 위의 예시에서 첫번째 원소가 arr[1]에 있다. 아래의 예시를 보자.

# 문자열을 콜론을 기준으로 분할, 배열 arr에 저장한 후 세번째 원소만 출력
echo "a:b:c:d:e" | awk '{ split($0, arr, ":"); print arr[3] }'
c

예를 하나 더 생각해 보자. 대화 내용을 단어별로 분할해서 배열에 저장한 후 작업을 하는 경우다. 이 경우에는 단어 구분자가 공백뿐만 아니라 마침표(.), 물음표(?), 쉼표(,) 등 다양한 문장부호가 되어야 하므로 구분자 항목에 정규표현식을 사용해야 한다.

# 문장을 단어별로 분할해서 배열 arr에 저장한 후 세번째 단어만 출력
echo "Hello? Is anybody here?" | awk '{ split($0, arr, /[ .,?!]+/); print arr[3] }'
anybody

구분자에 사용된 정규표현식(/[ .,?!]+/)을 잠깐 보자면, 공백, 마침표, 쉼표, 물음표, 느낌표([ .,?!])가 하나 이상 연속해서 출현(+)하는 경우를 의미한다.

728x90
Posted by 반달가면