본문 바로가기
Computer Science & Engineering/LINUX

리눅스에서 알아두면 유용한 awk 명령어 사용법

by 니나노 Mr.꾸 2024. 11. 6.
반응형

 

728x90

리눅스에서 awk는 데이터를 가공하고 분석할 때 매우 강력한 도구입니다. 이번 포스팅에서는 awk를 활용해 데이터를 특정 자릿수로 자르거나, 특정 조건을 만족하는 데이터만 추출하고 수정하는 방법을 다룹니다. 오늘 소개할 사용법은 실무에서도 다양하게 활용될 수 있어 꼭 알아두시면 좋습니다.

목차

  1. awk로 자릿수로 문자 잘라오기
  2. 특정 구분자로 분리한 데이터를 다시 구분하기
  3. 특정 조건에 맞는 라인에서 특정 자릿수만 수정하기
  4. awk에서 외부 변수 사용하는 법
  5. 한글 데이터에서 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. awksed의 차이점과 각 도구의 주요 용도는 무엇인가요?

Q2. awk에서 구분자가 여러 개일 때 처리하는 방법에는 무엇이 있을까요?

Q3. 한글을 포함한 파일에서 인코딩 문제를 해결하기 위한 방법에는 어떤 것이 있을까요?

728x90

댓글