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를 출력해서 |로 결과값을 넘겨서 :를 구분자로 하여 둘을 곱한다.
'Study > 리눅스' 카테고리의 다른 글
리눅스 8일차(사용자 계정 관리) (0) | 2022.07.17 |
---|---|
리눅스 7일차(sed) (0) | 2022.07.17 |
리눅스 5일차(vi 에디터) (0) | 2022.07.17 |
리눅스 4일차(방향 재지정 / find) (0) | 2022.07.17 |
리눅스 3일차(RegularExpression / grep) (0) | 2022.07.17 |