Linux awk 사용법

awk 가 뭐야?
awk 는 Linux 아래 명령 행 도구 입 니 다. sed 에 비해 awk 는 행동 단위 로 파일 을 처리 할 수 있 을 뿐만 아니 라 열 단위 로 파일 을 처리 할 수 있 습 니 다.또한, 이것 은 프로 그래 밍 언어 로 서 Linux / Unix 에서 텍스트 와 데 이 터 를 처리 하 는 데 사용 되 며, 데 이 터 는 표준 입력 에서 나 올 수도 있 고, 하나 이상 의 파일 에서 나 올 수도 있다.
파일 처리 방식
awk 는 텍스트 와 데 이 터 를 처리 하 는 방식 이 sed 와 비슷 합 니 다. 파일 을 한 줄 씩 스 캔 합 니 다. 첫 줄 에서 마지막 줄 까지 정규 표현 식 을 통 해 일치 하 는 특정 패턴 의 줄 을 찾 고 이 줄 에서 사용자 정의 작업 을 합 니 다. (작업 은 보통 인쇄 ~) 일치 하 는 패턴 이 지정 되 지 않 으 면 모든 데 이 터 를 처리 합 니 다.
awk 명령 형식 및 옵션
명령 행 문법 형식
awk     [-F     field-separator]    'commands'      input

awk 스 크 립 트 파일 형식
awk  -f     awk-script-file     input-file

명령 옵션
- F fs: 입력 파일 구분 자 를 지정 합 니 다. -v var = value: 사용자 정의 변 수 를 할당 합 니 다. -asign var = value: 동상. -f scriptfile or – file scriptfile: 스 크 립 트 파일 에서 awk 명령 을 읽 습 니 다.
사용 방법
awk     [option]    '{pattern + action }'   filename

pattern: awk 가 데이터 에서 찾 은 내용 을 표시 합 니 다.action: 일치 하 는 내용 을 찾 았 을 때 실 행 된 일련의 명령 입 니 다.
패턴
awk 는 패턴 과 작업 으로 구성 되 어 있 습 니 다. pattern {action} 두 가 지 는 선택 할 수 있 습 니 다. 패턴 이 없 으 면 action 은 모든 기록 (줄) 에 적 용 됩 니 다.action 이 없 으 면 일치 하 는 기록 을 모두 출력 합 니 다.기본 적 인 상황 에서 모든 입력 줄 은 하나의 기록 이 고 사용 자 는 RS 변수 나 - F 옵션 을 통 해 서로 다른 구분자 로 분할 할 수 있 습 니 다.
예 를 들 면:
[lzh@leap_ awk_test]$ cat file
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120
[lzh@leap_ awk_test]$ awk '{print $1}' file                   //  action  pattern
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120
[lzh@leap_ awk_test]$ awk '/^Product/' file                //  pattern  action
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120

패턴 종류
패턴 에 대해 서 는 다음 과 같은 임의의 것 이 될 수 있 습 니 다. 1. 정규 표현 식 2. 관계 표현 식 3. 패턴 일치 표현 식 (~ 와!) 4. BEGIN: 처리 되 기 전에 발생 하 는 동작 을 첫 번 째 입력 으로 지정 합 니 다. Begin 에서 전역 변 수 를 설정 할 수 있 습 니 다.5. END: 사용자 가 마지막 입력 기록 을 읽 은 후에 발생 하 는 동작 입 니 다.
awk 의 상용 환경 변수
$n: 현재 기 록 된 n 번 째 필드 를 표시 합 니 다. 필드 사 이 는 도 메 인 구분자 로 구 분 됩 니 다. $0: 완전한 입력 기록 을 나타 낸다.ARGC: 명령 행 인자 의 수 를 표시 합 니 다.
[lzh@leap_ awk_test]$ awk 'BEGIN{ print ARGC}{print $1}' file
2
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120

ARGIND: 명령 줄 에 있 는 현재 파일 의 위 치 를 나 타 냅 니 다.ENVIRON: 환경 변수 와 연 결 된 배열 을 표시 합 니 다.FILENAME: 현재 파일 이름 을 표시 합 니 다.FS: 입력 영역 구분 자 를 표시 합 니 다.
[lzh@leap_ awk_test]$ awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd | head -n 3
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin
filename:/etc/passwd,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

FNR: 파일 을 탐색 한 기록 수 를 표시 합 니 다.
[lzh@leap_ awk_test]$ awk -F: 'BEGIN{ print FNR }{print $1,FNR}' file
0
ProductA 1
ProductB 2
ProductC 3
ProductD 4
ProductE 5
ProductF 6

OFS: 출력 영역 구분 자 를 표시 합 니 다.ORS: 출력 기록 구분 자 를 표시 합 니 다.
[lzh@leap_ awk_test]$ awk -F: 'BEGIN{ OFS="###"} {print $0,$1,$2}' file
ProductA:20###ProductA###20
ProductB:50###ProductB###50
ProductC:20###ProductC###20
ProductD:30###ProductD###30
ProductE:99###ProductE###99
ProductF:120###ProductF###120

예 를 들 어 한 사람의 디 렉 터 리 아래 파일 의 크기 를 찾 아 총 크기 를 계산한다.
[r[root@leap_ awk_test]# ls -lR /home/lzh/code | awk 'BEGIN{size=0}/^-/{size+=$5; print $9,$5} END{printf("total:%d
",size);}' | tail -n 10
test.c 233 3_class.tar 20480 3_class.tgz 2922 proc.c 0 a.out 6474 file1.txt 270 file.txt 1405 test.c 125 test.cpp 273 total:268757855

좋은 웹페이지 즐겨찾기