Linux awk 사용법
9821 단어 리 눅 스 학습 노트
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
어떻게 Linux 에서 사용자 및 사용자 그룹 을 추가/삭제/수정 합 니까?사용자 암 호 를 지정 하고 수정 하 는 셸 명령 은 passwd 입 니 다.슈퍼 사용 자 는 자신 과 다른 사용 자 를 위해 암 호 를 지정 할 수 있 으 며, 일반 사용 자 는 그것 으로 자신의 암 호 를 수정 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.