본문 바로가기
Data Engineering/Linux

[Linux] 문자열 분리 (Split string) - awk, split

by Toritol 2022. 10. 11.
728x90

 

 이번 글에서는 Linux 상에서 특정 패턴으로 문자열을 분리하는 방법에 관해 살펴보고자 합니다. 우선 사용한 명령어부터 확인하면, 'awk'와 awk 내의 'split'입니다.

 awk는 해당 명령어를 개발한 사람들의 이니셜을 조합하여 만든 것이기 때문에, awk를 보고 어떤 명령어인지 떠올리는 것은 어렵습니다(Aho + Weinberger + Kernighan). awk는 입력된 파일로부터 데이터를 분류한 이후, 분류된 텍스트 데이터를 바탕으로 전처리 및 연산, 패턴 매칭 여부 검사 등의 과정을 진행하고, 결과를 출력하는 기능을 수행합니다[1].

 이번 글에서는 처음에 언급한 것처럼 awk의 문자열 분리 기능에 대해서만 살펴보려합니다. 수행하고자 했던 업무는 shell 파일을 실행할 때, 'dm_test.sh', 'dw_test.sh' 등 처럼의 파일명에서 '_' 앞에 위치한 문자열만 변수로 할당하고자 하는 것입니다.

 

 기본적인 사용 방법은 다음과 같습니다. 우선 문자열을 입력한 이후, awksplit을 입력하고, 마지막에 print를 통해 출력하면 됩니다.

 

(base) [root@server bin]# echo 'dm_test.sh' | awk '{split($1,a,"_"); print a[1]}'

 

 split을 자세하게 살펴보면, 총 3개의 인자가 들어가게 됩니다.

 1) '$1'은 열의 순서를 의미합니다. 현재는 'dm_test.sh'만 입력하였기 때문에 열이 한 개라 $1을 입력하였지만, 만약 'dm_test.sh dw_test.sh stg_test.sh'과 같이 열이 3개가 있다면, 분리하고자 하는 열의 순서를 입력하면 됩니다.

 2) 'a'는 분리한 문자열을 할당받는 array 명을 의미합니다. 이 부분은 print 부분에서 설명을 추가하겠습니다.

 3) "_"는 문자열을 분리하고자 하는 패턴을 의미합니다.

  마지막으로 print 부분에서는 두 번째 인자로 입력한 array를 사용합니다. 저는 'dm_test.sh'에서 '_' 앞에 부분의 문자열을 사용하고자 했으므로 a[1]을 입력하였고, 만약 뒷부분인 'test.sh'을 사용하고자 한다면 a[2]를 입력하면 됩니다.

 따라서 출력된 결과는 다음과 같습니다.

 

(base) [root@server bin]# echo 'dm_test.sh' | awk '{split($1,a,"_"); print a[1]}'
dm

 

 특정 변수의 문자열을 분리하고 새로운 변수로 할당하는 코드는 다음과 같습니다.

 

(base) [root@server bin]# test_var=`echo $pgm_nm | awk '{split($1,a,"_"); print a[1]}'`

 

 awk 명령어와 관련된 기능은 더 많기 때문에, 추후 계속해서 awk와 관련된 글을 작성할 계획입니다.

 

 

<참고>

[1] https://recipes4dev.tistory.com/171

 

리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.

1. awk 명령어. 대부분의 리눅스 명령들이, 그 명령의 이름만으로 대략적인 기능이 예상되는 것과 다르게, awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않습니다. awk는 최

recipes4dev.tistory.com

 

728x90

댓글