Study/리눅스

리눅스 6일차(awk)

됵이 2022. 7. 17. 17:06

grep과 awk 차이점

  • grep : 행단위 출력
  • awk  : 텍스트를 이용해서 행과 열을 기반으로 자료출력 가능

 

awk사용법

awk 옵션 '패턴{액션}' [파일 | 변수값]

[옵션]
#-u 버퍼를 사용하지 않고 출력
#-F 확장된 정규 표현식으로 필드 구분자를 지정
#-v 변수 선언
#-f awk 명령 스크립트를 불러온다.

#예제

awk -F":" '/linux {print $1}' test.txt
#필드 구분을 정규 표현식으로 하여 : 를 기준으로 필드를 나눈다. 
#test.txt 안에서 linux가 포함된 문자열을 찾아서 첫번째 레코드를 출력

awk패턴의 종류

비교 연산 패턴

awk '$3 > 500 {print $1, $2}' testfile
awk '$5 > 500 && $5 < $2' testfile

정규표현식 패턴

awk '/^[A-Z][a-z]/' testfile
#testfile에서 대소문자로 시작하는것 매칭
awk '/^정/{print $1,$2}' testfile
#testfile에서 정으로 시작하는것 찾아서 출력
awk '/[[:lower:]]+g[[:space:]]' testfile

패턴매칭 연산

  • ~ : 일치하는 부분
  • !~ : 일치하지 않는 부분
awk '$2 !~ /g$/' file
#g를 포함하지 않는 것

BEGIN / END 패턴

첫번째 레코드를 처리하기 전에 "BEGIN" 에 지정된 액션을 실행

그리고 END 패턴을 실행 한다. 

아래와 같이 조건문도 사용 가능

awk연산자

연산자 설명
산술 =,+=,-=,*=,/=,%=
조건 ?,:
논리 ||,&&,!
패턴 ~,!~
비교 <,<=,>,>=,!=,==
증감 ++,--
필드 참조 $

awk내장변수

키워드 설명
FILENAME 현재 입력파일의 이름
$0 입력레코드
$n 입력 레코드의 n번째 필드
ENVIRON 환경변수를 모아둔 관계형 배열
NR 출력순번
NF 현재 줄의 필드수
ARGC 명령줄 인자의 개수
ARGV 명령줄 인자의 배열
FNR 현재파일에서의 레코드 번호
FS 입력 필드 구분자
OFMT 숫자들의 표현형식
OFS 출력필드 구분자
ORS 출력 레코드 구분자
RS 입력코드 구분자
EP 서브스크립트의 구분자
RLENGTH match 함수로 일치하는 문자열의 길이
RSTART match 함수로 일치하는 문자열의 오프셋

 

알아 둘 것

  • 필드 : 열
  • 레코드 : 행

'|' 에 관한 내용

echo "3:4" | awk -F: '{print $1*$2}'

-->3:4를 출력해서 |로 결과값을 넘겨서 :를 구분자로 하여 둘을 곱한다.