셸 스 크 립 트 빠 른 입문 - 정규 3 총사 의 3 awk 용법 대전!!
awk 는 linux/unix 에서 텍스트 와 데 이 터 를 처리 하 는 프로 그래 밍 언어 입 니 다.데 이 터 는 표준 입력, 하나 이상 의 파일 또는 다른 명령 의 출력 에서 나 올 수 있 습 니 다.사용자 정의 함수 와 동적 정규 표현 식 등 선진 적 인 기능 을 지원 하 며 linux/unix 의 강력 한 프로 그래 밍 도구 입 니 다.명령 행 에 사용 되 지만 스 크 립 트 로 사용 되 는 경우 가 많 습 니 다.awk 의 텍스트 와 데 이 터 를 처리 하 는 방식 은 이 렇 습 니 다. 파일 을 한 줄 씩 스 캔 하고 첫 줄 에서 마지막 줄 까지 일치 하 는 특정한 패턴 의 줄 을 찾 아 원 하 는 동작 을 합 니 다.지정 한 처리 동작 이 없 으 면 표준 출력 (화면) 에 일치 하 는 줄 을 표시 하고 지정 한 모드 가 없 으 면 지정 한 줄 을 모두 처리 합 니 다.awk 는 각각 작가 성씨 의 첫 번 째 자 모 를 대표 한다.그 작 가 는 알 프 레 드 Aho, Brian Kernighan, Peter Weinberger 등 세 사람 이기 때문이다.gawk 는 awk 의 GNU 버 전 으로 Bell 실험실 과 GNU 의 확장 을 제공 합 니 다.
1. 명령 행 방식
awk [- F field - separator] 'commands' input - file (s) 에서 commands 는 진정한 awk 명령 이 고 [- F 역 구분자] 는 선택 할 수 있 습 니 다.input - file (s) 은 처리 해 야 할 파일 입 니 다.awk 에서 파일 의 줄 마다 도 메 인 구분자 로 구 분 된 항목 을 도 메 인 이 라 고 합 니 다.일반적으로 - F 도 메 인 구분자 가 가리 키 지 않 은 상태 에서 기본 도 메 인 구분자 가 빈 칸 입 니 다.
2. awk 명령 형식:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
[-F|-f|-v] ,-F ,-f ,-v var=value
' '
BEGIN , , , , FS
// ,
{} ,
;
END , ,
3. 특별한 요점:
$0
$1
NF
NR ,
FNR NR , , 1
\t
\n
FS BEGIN
RS , ( )
~ , ==
!~ ,
== , ,
!= ,
&&
||
+ 1 1
/[0-9][0-9]+/
/[0-9][0-9]*/
FILENAME
OFS , ,
ORS , ,
-F'[:#/]'
2. - F 지정 구분자
$1 , ,$3 , \t
,
awk -F":" '{print $1}' /etc/passwd
awk -F":" '{print $1 $3}' /etc/passwd //$1 $3 ,
awk -F":" '{print $1,$3}' /etc/passwd // ,$1 $3
awk -F":" '{print $1 " " $3}' /etc/passwd //$1 $3
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //
awk -F: '{print NF}' /etc/passwd //
awk -F: '{print $NF}' /etc/passwd // NF
awk -F: 'NF==4 {print }' /etc/passwd // 4
awk -F: 'NF>2{print $0}' /etc/passwd // 2
awk '{print NR,$0}' /etc/passwd //
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd // , , , ,
awk -F: 'NR==5{print}' /etc/passwd // 5
awk -F: 'NR==5 || NR==6{print}' /etc/passwd // 5 6
route -n|awk 'NR!=1{print}' //
3.//일치 코드 블록
// !// ~// !~// ~/a1|a2/ a1 a2
awk '/mysql/' /etc/passwd
awk '/mysql/{print }' /etc/passwd
awk '/mysql/{print $0}' /etc/passwd //
awk '!/mysql/{print $0}' /etc/passwd // mysql
awk '/mysql|mail/{print}' /etc/passwd
awk '!/mysql|mail/{print}' /etc/passwd
awk -F: '/mail/,/mysql/{print}' /etc/passwd //
awk '/[2][7][7]*/{print $0}' /etc/passwd // 27 , 27,277,2777...
awk -F: '$1~/mail/{print $1}' /etc/passwd //$1
awk -F: '{if($1~/mail/) print $1}' /etc/passwd //
awk -F: '$1!~/mail/{print $1}' /etc/passwd //
awk -F: '$1!~/mail|mysql/{print $1}' /etc/passwd IF
{} , ()
awk -F: '{if($1~/mail/) print $1}' /etc/passwd //
awk -F: '{if($1~/mail/) {print $1}}' /etc/passwd //
awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd //if...else...
4. 조건 식
== != > >=
awk -F":" '$1=="mysql"{print $3}' /etc/passwd
awk -F":" '{if($1=="mysql") print $3}' /etc/passwd //
awk -F":" '$1!="mysql"{print $3}' /etc/passwd //
awk -F":" '$3>1000{print $3}' /etc/passwd //
awk -F":" '$3>=100{print $3}' /etc/passwd //
awk -F":" '$3<1{print $3}' /etc/passwd //
awk -F":" '$3<=1{print $3}' /etc/passwd //
5. 논리 연산 자
&& ||
awk -F: '$1~/mail/ && $3>8 {print }' /etc/passwd // ,$1 mail, $3>8
awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwd
awk -F: '$1~/mail/ || $3>1000 {print }' /etc/passwd //
awk -F: '{if($1~/mail/ || $3>1000) print }' /etc/passwd
6. 수치 연산
awk -F: '$3 > 100' /etc/passwd
awk -F: '$3 > 100 || $3 < 5' /etc/passwd
awk -F: '$3+$4 > 200' /etc/passwd
awk -F: '/mysql|mail/{print $3+10}' /etc/passwd // 10
awk -F: '/mysql/{print $3-$4}' /etc/passwd //
awk -F: '/mysql/{print $3*$4}' /etc/passwd //
awk '/MemFree/{print $2/1024}' /proc/meminfo //
awk '/MemFree/{print int($2/1024)}' /proc/meminfo //
7. 출력 구분자 OFS
awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt
awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt
// 6 WAIT , , 4,5,6,
① route -n|awk 'NR!=1{print > "./fs"}'
② route -n|awk 'NR!=1{print}' > ./fs
8. 포맷 출력
netstat -anp|awk '{printf "%-8s %-8s %-10s
",$1,$2,$3}'
printf
%
-8 8
s
, ( 8), ( 8),
( 10)
netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-10s %-10s %-10s
",$1,$2,$3}'
netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-3s %-10s %-10s %-10s
",NR,$1,$2,$3}'
IF 문
awk -F: '{if($3>100) print "large"; else print "small"}' /etc/passwd
small
small
small
large
small
small
awk -F: 'BEGIN{A=0;B=0} {if($3>100) {A++; print "large"} else {B++; print "small"}} END{print A,"\t",B}' /etc/passwd
//ID 100,A 1, B 1
awk -F: '{if($3<100) next; else print}' /etc/passwd // 100 ,
awk -F: 'BEGIN{i=1} {if(i /etc/passwd
awk -F: 'BEGIN{i=1} {if(i /etc/passwd
awk -F: '{print ($3>100 ? "yes":"no")}' /etc/passwd
awk -F: '{print ($3>100 ? $3":\tyes":$3":\tno")}' /etc/passwd
동안
awk -F: 'BEGIN{i=1} {while(i /etc/passwd
7 root 1
7 x 2
7 0 3
7 0 4
7 root 5
7 /root 6
11. 배열
netstat -anp|awk 'NR!=1{a[$6]++} END{for (i in a) print i,"\t",a[i]}'
netstat -anp|awk 'NR!=1{a[$6]++} END{for (i in a) printf "%-20s %-10s %-5s
", i,"\t",a[i]}'
9523 1
9929 1
LISTEN 6
7903 1
3038/cupsd 1
7913 1
10837 1
9833 1
12. 응용
1
awk -F: '{print NF}' helloworld.sh //
awk -F: '{print $1,$2,$3,$4,$5}' helloworld.sh // 5
awk -F: '{print $1,$2,$3,$4,$5}' OFS='\t' helloworld.sh // 5
awk -F: '{print NR,$1,$2,$3,$4,$5}' OFS='\t' helloworld.sh // 5 ,
2
awk -F'[:#]' '{print NF}' helloworld.sh // : #,
awk -F'[:#]' '{print $1,$2,$3,$4,$5,$6,$7}' OFS='\t' helloworld.sh //
3
awk -F'[:#/]' '{print NF}' helloworld.sh // ,
awk -F'[:#/]' '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}' helloworld.sh //
4
/home , , KB
ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is:",sum/1024,"KB"}'
ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is:",int(sum/1024),"KB"}' //int
5
netstat -anp LISTEN CONNECT
netstat -anp|awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf "%-10s %-6s %-3s
", i," ",sum[i]}'
6
/home ?
ls -l|awk 'NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf "%-6s %-5s %-3s
",i," ",sum[i]}'
mysql 199
root 374
/home size ?
ls -l|awk 'NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf "%-6s %-5s %-3s %-2s
",i," ",sum[i]/1024/1024,"MB"}'
7
awk 'BEGIN{math=0;eng=0;com=0;printf "Lineno. Name No. Math English Computer Total
";printf "------------------------------------------------------------
"}{math+=$3; eng+=$4; com+=$5;printf "%-8s %-7s %-7s %-7s %-9s %-10s %-7s
",NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf "------------------------------------------------------------
";printf "%-24s %-7s %-9s %-20s
","Total:",math,eng,com;printf "%-24s %-7s %-9s %-20s
","Avg:",math/NR,eng/NR,com/NR}' test0
[root@localhost home]# cat test0
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 (다 중 스 레 드 대량 생 성 사용자)예 를 들 어 백업 데이터 베 이 스 는 100 개의 라 이브 러 리 가 있 고 정상 적 인 백업 효율 이 매우 낮 습 니 다.다 중 스 레 드 가 있 으 면 백업 하 는 데 10 시간 이 걸 릴 수도 있 었 는데 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.