반응형

awk 명령어 활용 (파일 데이터 확인, 조작, 출력, 저장)

 

awk 라는 용어가 와닿지 않는다. 자칫하면 aws라고 읽을정도. 보통 명령어는 명령어만으로 대략적인 이름을 파악할 수 있는데, awk 명령어는 예상하지 쉽지 않다. awk 기능을 만든 사람들의 이니셜을 조합하여 만든 이름이기 때문이다. 

Aho + Weinberger + Kernighan. (A:Alfred V. Aho, W:Peter J. Weinberger, K:Brian W. Kernighan)

 

awk 란 파일로부터 레코드(record)를 선택하고 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램이다. 해당 명령어를 입력한 후 지정한 파일로부터 데이터를 분류하고, 분류된 텍스트 데이터를 바탕으로 매칭여부를 검사하거나 데이터 조작 또는 연산을 수행하고 결과를 눈으로 확인할 수 있다. 아래와 같은 내용들로 활용할 수 있다.

 

  • 텍스트 파일의 전체 내용 출력
  • 파일의 특정 필드만 출력
  • 특정 필드에 문자열을 추가해서 출력
  • 패턴이 포함된 레코드 출력
  • 특정 필드에 연산 수행 결과 출력
  • 필드 값 비교에 따라 레코드 출력

 

awk 명령어 옵션

awk [OPTION...] [awk program] [ARGUMENT...]
  OPTION
    -F        : 필드 구분 문자 지정
    -f        : awk program 파일 경로 지정
    -v        : awk program에서 사용될 특정 variable값 지정
  awk program
    -f 옵션이 사용되지 않은 경우, awk가 실행할 awk program 코드 지정
  ARGUMENT
    입력 파일 지정 또는 variable 값 지정

 

awk 활용

# 파일의 모든 레코드 출력
$ awk '{ print }' [파일명]

 

조건을 걸어서 레코드를 출력해볼 수도 있다.

# 0번째 레코드의 길이가 10이상인 경우 1, 2, 3 레코드 출력
$ awk 'length($0) > 10 { print $1, $2, $3 } [파일명]

 

필드값을 출력하는 방법은 아래와 같다.

# 1번째 레코드 출력
$ awk '{ print $1 }' [파일명]

# 데이터를 조작하여 출력
# 1번째 레코드와 2번째 레코드 앞에 값을 붙여 출력
$ awk '{print "no:"$1, "user:"$2}' [파일명]

# aa가 포함된 레코드 출력
$ awk '/aa/' [파일명]

# 1번째 레코드에 aa 가 있는 레코드 출력
$ awk '$1 == aa { print }' [파일명]

# awk 결과값 저장하기 
$ awk [조건] { print } [파일명] > [new_파일명]

 

기본적으로 awk는 레코드의 필드를 구분하는 문자는 space이다. '-F'를 통해 변경이 가능하다.

# 레코드 구분 문자를 , 로 변경 (csv 파일의 경우 사용)
$ awk -F ',' '{ print } ' [파일명]

 

 

참고

https://recipes4dev.tistory.com/171

반응형

'Etc > Linux' 카테고리의 다른 글

[Linux] mac 에서 파일 인코딩 변환 (iso-8859 -> euc-kr)  (0) 2022.07.11
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기