반응형
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 } ' [파일명]
참고
반응형
'Etc > Linux' 카테고리의 다른 글
[Linux] mac 에서 파일 인코딩 변환 (iso-8859 -> euc-kr) (0) | 2022.07.11 |
---|
최근댓글