리눅스에서 awk
는 데이터를 가공하고 분석할 때 매우 강력한 도구입니다. 이번 포스팅에서는 awk
를 활용해 데이터를 특정 자릿수로 자르거나, 특정 조건을 만족하는 데이터만 추출하고 수정하는 방법을 다룹니다. 오늘 소개할 사용법은 실무에서도 다양하게 활용될 수 있어 꼭 알아두시면 좋습니다.
목차
- awk로 자릿수로 문자 잘라오기
- 특정 구분자로 분리한 데이터를 다시 구분하기
- 특정 조건에 맞는 라인에서 특정 자릿수만 수정하기
- awk에서 외부 변수 사용하는 법
- 한글 데이터에서 substr 사용법
1. awk로 자릿수로 문자 잘라오기
awk
는 기본적으로 필드를 기준으로 데이터를 다루지만, substr
함수를 활용하면 특정 자릿수로 문자를 잘라낼 수 있습니다. 예를 들어, 파일의 각 줄에서 첫 번째 필드에서 3~5번째 자릿수만을 잘라오고 싶을 때는 다음과 같이 사용합니다:
awk '{print substr($1, 3, 3)}' 파일이름
여기서:
- substr($1, 3, 3)는 $1 필드에서 3번째부터 3개의 문자를 잘라옵니다. $1을 $0으로 바꾸면 전체 줄을 자릿수 기준으로 처리할 수도 있습니다.
이 방법은 데이터를 분석하거나 특정 자릿수의 값을 추출할 때 매우 유용합니다.
2. 특정 구분자로 분리한 데이터를 다시 구분하기
awk
에서는 -F
옵션으로 구분자를 설정할 수 있습니다. 만약 특정 필드 내에 추가적인 구분자가 있어, 이를 다시 나누고 싶다면 split
함수를 사용하면 됩니다.
예를 들어, 다음과 같은 데이터가 있을 때:
12345|hello,world|example
67890|foo,bar|text
두 번째 필드에서 ,로 나누고 싶다면 다음과 같이 사용할 수 있습니다:
awk -F '|' '{ split($2, parts, ","); print $1, parts[1], parts[2], $3 }' 파일이름
- split($2, parts, ",")는 두 번째 필드를 ,로 나눠 parts 배열에 저장합니다.
- parts[1]과 parts[2]로 배열의 각 요소를 출력할 수 있습니다.
이렇게 awk의 split 기능을 사용하면 구분자 속 구분자까지 세분화하여 데이터를 다룰 수 있습니다.\
3. 특정 조건에 맞는 라인에서 특정 자릿수만 수정하기
특정 조건을 만족하는 라인의 자릿수 일부만 수정해야 하는 경우, awk
의 조건문과 substr
을 조합하여 사용할 수 있습니다. 예를 들어, "target_text"라는 문자열이 포함된 줄에서만 5번째부터 3개의 문자를 "new"로 수정하려면 다음과 같이 합니다:
awk '/target_text/ { $0 = substr($0, 1, 4) "new" substr($0, 8) }1' 파일이름
여기서:
- /target_text/는 target_text가 포함된 줄을 찾는 조건입니다.
- substr($0, 1, 4) "new" substr($0, 8)는 첫 4문자, "new", 그 이후의 문자를 결합하여 출력합니다.
이 방법을 활용하면 조건을 만족하는 라인에서만 부분적으로 내용을 변경할 수 있습니다.
4. awk에서 외부 변수 사용하는 법
awk
스크립트에서 외부 변수를 사용해야 할 때가 있습니다. 이 경우, -v
옵션을 사용하면 간편하게 외부 변수를 awk
내에서 사용할 수 있습니다.
my_var="외부값"
awk -v var="$my_var" '{print $1, var}' 파일이름
5. 한글 데이터에서 substr 사용법
한글은 UTF-8 환경에서 3바이트로 인식되기 때문에, 기본 awk
로는 잘라내기가 어렵습니다. 이를 해결하기 위해 다음과 같은 대안을 사용할 수 있습니다.
1. gawk의 --posix 옵션 사용: 한글 자릿수 처리가 어느 정도 가능합니다.
gawk --posix '{print substr($0, 2, 3)}' 파일이름
2. iconv를 사용한 인코딩 변환: UTF-8 파일을 EUC-KR로 변환한 뒤 awk로 처리합니다.
iconv -f UTF-8 -t EUC-KR 파일이름 | awk '{print substr($0, 2, 3)}' | iconv -f EUC-KR -t UTF-8
이러한 방법을 통해 한글 문자열에서도 자릿수를 정확하게 지정해 추출할 수 있습니다.
마무리
이번 포스팅에서는 awk
를 사용해 데이터를 자릿수 단위로 조정하거나, 특정 조건을 만족하는 라인에서 부분적으로 문자열을 수정하는 방법, 그리고 한글을 다루는 방법을 알아봤습니다. 리눅스 환경에서 데이터를 효율적으로 처리하고자 한다면 awk
의 다양한 기능을 익히는 것이 큰 도움이 될 것입니다. 필요에 따라 활용 가능한 명령어를 정리해 두시고, 반복적으로 연습해보세요.
후속 질문
Q1. awk
와 sed
의 차이점과 각 도구의 주요 용도는 무엇인가요?
Q2. awk
에서 구분자가 여러 개일 때 처리하는 방법에는 무엇이 있을까요?
Q3. 한글을 포함한 파일에서 인코딩 문제를 해결하기 위한 방법에는 어떤 것이 있을까요?
'Computer Science & Engineering > LINUX' 카테고리의 다른 글
리눅스 명령어(2) - 초보자를 위한 AWK와 SED 완벽 가이드 (0) | 2024.12.10 |
---|
댓글