정보
-
업무명 : 리눅스에서 awk 명령어를 사용하는 기초적인 방법 정리
-
작성자 : 박진만
-
작성일 : 2020-03-14
-
설 명 :
-
수정이력 :
내용
[특징]
-
리눅스에서 awk 명령어 사용방법 소개
[활용 자료]
-
없음
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
작업 환경 구축
-
소스 코드 작성 및 실행
-
실행 결과 확인
[사용 OS]
-
Linux (CentOS v7.0)
- VMware Workstation Pro v15.5
[사용 언어]
-
shell script (bash)
소스 코드
[들어가기]
-
awk는 하나 이상의 공백으로 구분 된 여러 열의 텍스트 데이터를 처리 할 때 유용한 도구이다.
-
사칙 연산 역시 가능하다.
-
예를 들어 아래와 같은 a.txt 파일이 있다고 가정해보자
1 2
3 4
-
여기서 아래의 명령을 실행하면
awk '{print $1 * $2;}' a.txt
# 또는
cat a.txt | awk '{print $1 * $2;}'
-
출력 결과는 아래와 같다.
2
12
-
이 때 구분 기호는 기본적으로 하나 이상의 공백이나 탭이 사용되어 있어야 한다.
-
그리고 공백이나 탭이 사이에 여러개가 있더라도 하나의 구분으로 간주한다.
[기초적 사용법 예시]
-
쉼표로 구분된 값 (CSV) 처리하기
-
쉼표로 구분된 값을 처리하기 위해서는 -F 옵션에서 구분 기호를 지정할 수 있다.
-
예를 들어 아래와 같은 b.txt 파일이 있다고 가정하자
-
1,2,3
4,5,6
7,8,9
-
여기서 아래의 awk 명령을 실행하면
cat b.txt | awk -F, '{print $1}'
-
아래의 결과가 도출된다. 즉 -F 명령으로 구분자를 지정한 후 print를 이용해 첫번째 컬럼만 출력한 형태이다.
1
4
7
-
행 번호 출력하기
-
행 번호를 출력하기 위해서는 print 에 NR 옵션을 추가한다.
-
cat b.txt | awk -F, '{print NR " " $0;}'
1 1,2,3
2 4,5,6
3 7,8,9
-
여기서 $0 은 전체 컬럼을 출력한다는 의미이다.
-
만약 행 번호를 1이 아닌 0부터 시작하고자 한다면 아래처럼 사용할 수 있다.
awk_example]$ cat b.txt | awk -F, '{print NR-1 " " $0;}'
0 1,2,3
1 4,5,6
2 7,8,9
-
특정 열에 특정 문자열이 존재하는 행만 출력하기
-
아래와 같은 파일이 있다고 가정하자 (c.txt)
-
a b c
d e f
g h i
-
여기서 첫번째 열에서 "a" 가 있는 행만 출력하고 싶은 경우 아래와 같이 쓴다.
cat c.txt | awk '$1=="a"'
a b c
-
만약 첫번째 열에서 "a" 가 없는 행만 출력하고 싶다면
cat c.txt | awk '$1!="a"
d e f
g h i
-
특정 열에 특정 패턴이 존재하는 행만 출력하기
-
패턴을 매칭하기 위해서는 슬레시 (/) 사이에 정규식을 넣어서 사용한다. ('/pattern/')
-
아래의 예시는 2번째 컬럼에서 e로 시작하는 문자가 있는 행만 출력하는 예시이다.
-
cat c.txt | awk '$2~/^e/'
d e f
-
숫자가 적힌 텍스트 파일에서 합계 / 평균 / 최대 / 최소값 계산하기
-
아래와 같은 파일이 있다고 가정하자 (d.txt)
-
100
200
300
400
500
-
합계를 계산
awk '{sum+=$1}END{print sum}' d.txt
1500
-
평균을 계산
awk '{sum+=$1}END{print sum/NR}' d.txt
300
-
최댓값을 계산
awk 'NR==1 {max=$1} {if($1 > max) max = $1} END {print max}' d.txt
500
-
최솟값을 계산
awk 'NR==1 {min=$1} {if($1 < max) min = $1} END {print min}' d.txt
100
-
텍스트 파일의 각 행의 문자 수 구하기
-
아래와 같은 파일이 있다고 가정하자 (e.txt)
-
a
ab
abc
abcd
abcde
-
각 행의 문자수 구하기 (바이트 아님)
cat e.txt | awk '{print length();}'
1
2
3
4
5
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'프로그래밍 언어 > Linux' 카테고리의 다른 글
[Linux] ccat 명령어 소개 : cat 명령어 + 구문 강조 (0) | 2020.03.25 |
---|---|
[Linux] 리눅스 사용자를 위한 cat 명령어의 사용법 (주요 사용 용도 : 파일 내용 확인, 파일 합치기) (0) | 2020.03.14 |
[Linux] 리눅스 VMware Workstation에서 "Failed to start the virtual machine" 오류 해결 방법 (0) | 2020.02.17 |
[Linux] 리눅스에서 텍스트 처리를 위한 Awk 사용법 (0) | 2020.02.09 |
[Linux] 리눅스 명령어를 이용하여 텍스트 정제 방법 소개 (0) | 2020.02.09 |
최근댓글