php教程 PHP开发 Linux awk 명령에 대한 자세한 설명

Linux awk 명령에 대한 자세한 설명

Dec 15, 2016 am 10:38 AM

awk는 라인 프로세서입니다. 화면 처리의 장점에 비해 대용량 파일을 처리할 때 메모리 오버플로나 처리 속도 저하 문제가 없습니다. 일반적으로 텍스트 정보 형식을 지정하는 데 사용됩니다

awk 처리 프로세스: 각 줄을 차례로 처리한 후

awk 명령 형식을 출력합니다.

awk [-F|-f|-v] 'BEGIN{} //{command1 command2} END{ } ' file

[-F|-f|-v] 큰 매개변수, -F는 구분 기호를 지정하고, -f는 스크립트를 호출하고, -v는 변수 var=value

' '을 정의합니다. ' 코드 블록 인용

BEGIN 코드 블록 초기화, 각 줄을 처리하기 전에 코드 초기화, 주로 전역 변수 참조, FS 구분 기호 설정

// 일치하는 코드 블록, 문자열 또는 일반일 수 있음 Expression

{} 하나 이상의 명령을 포함하는 명령 코드 블록

; 세미콜론으로 구분된 여러 명령

END 코드 블록 종료, 각 줄 다음에 실행되는 코드 블록 처리는 주로 최종 계산을 수행하거나 최종 요약 정보를 출력하는 데 사용됩니다.

특수 사항:

$0은 현재 줄 전체를 나타냅니다.

$1 첫 번째 필드

NF                                                                     out of off off 's             out out out out out out out out out out' ‐ NR ‐‐‐‐‐ 및 ? 증분적으로 각 파일은 1개의 구분 기호에서 시작됩니다. , 기본값은 줄 바꿈입니다(즉, 텍스트가 한 줄씩 입력됩니다)

~ 일치, ==

와 비교하여 정확한 비교가 아님!~ 일치하지 않음, 부정확한 비교

== 같음, 모두 같음, 정확한 비교

!= 같지 않음, 정확한 비교

&& 논리 및

|| 🎜 >+ 일치시 1개 이상을 뜻

/[0-9][0-9]+/ 2개 이상의 숫자

/[0-9][ 0-9 ]*/ 하나 이상의 숫자

FILENAME 파일 이름

OFS 출력 필드 구분 기호, 기본값도 공백이며 탭 등으로 변경할 수 있습니다.

ORS 출력 레코드 구분 기호는 기본적으로 개행 문자입니다. 즉, 처리 결과도 한 줄씩 화면에 출력됩니다.

-F'[:#/]' 세 개의 구분 기호 정의

print & $0

print는 지정된 내용을 인쇄하는 awk의 주요 명령입니다

awk '{print}' /etc/passwd == awk '{print $0} ' /etc/passwd

AWK '{Print ""}'/ETC/PASSWD // passwd의 내용을 출력하지 않고 동일한 수의 항공 라인을 출력합니다. AWK가 라인이라는 것을 추가로 설명합니다. 텍스트 처리 중

awk '{print "a"}' /etc/passwd /etc/passwd /etc/passwd

awk -F: '{print $1 print $2}' / etc/passwd /etc/passwd //텍스트를 한 줄씩 처리하는 방법을 더 자세히 이해하기 위해 각 줄의 처음 두 필드를 별도의 줄에 출력합니다

awk -F: '{print $1,$3,$6}' OFS="t" /etc/passwd //탭 문자를 구분 기호로 사용하여 필드 1,3,6 출력

-f는 스크립트 파일을 지정합니다

awk -f script.awk 파일

BEGIN{

FS=":"

}

{print $1}                                               //효과는 a와 같습니다. 주 - F":" '{print $1}'(단, 구분 기호는 FS

awk 'BEGIN{X =0} /^$/{ X+=를 사용하여 코드 자체에 지정됨) 1 } END{print "찾았습니다", l|awk 'BEGIN{sum=0}!/^d/{sum+=$5} END{print "전체 크기는",sum}'

-F는 구분 기호를 지정합니다

$1은 구분 기호를 지정한 후 첫 번째 필드를 의미하고, $3은 세 번째 필드를 의미하고, t는 탭 문자를 의미합니다.

하나 이상의 연속된 공백이나 탭은 구분 기호로 간주됩니다. 즉, 여러 개의 공백 하나의 공백으로 간주됩니다.

awk -F":" '{print $1}' /etc/passwd

awk -F":" '{print $1 $3}' / etc/passwd '에서 's''로           ‐ ‐ ‐ ‐ ‐ ​ ​ ​ ​ ​ ​ ​ ​ ​

awk -F":" '{print $1 " " $3}' /etc /passwd                                                                                 $1과 $3을 구분하려면 공백을 수동으로 추가합니다.

awk -F":" '{ print "Username:" $1 "tt 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 & GT; 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                                                | >

awk -F: 'NR==5 || NR==6{print}' /etc/passwd                              > Route -n | AWK 'NR! 첫 번째 줄

// 코드 블록 일치

// 순수 문자 일치 !//순수 문자 불일치 ~//필드 값 일치 !~//필드 값 불일치 ~/ a1|a2/Field 값은 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                                                            > awk -F: '$1~/mail/{print $1}' /etc/passwd                                                                                                                    > ) 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                                                                                                  ~ ~ ~       }}' /etc/passwd                   //if...else...

 

 

조건식

== != > >=

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}' " '$3<1보다 큼 {print $3}' /etc/passwd                                                   //

awk -F":" "'$3<=1{print $3}' /etc/passwd          > 🎜>논리 연산자

&& ||

awk -F: '$1~/mail/ && $3>8 {print }' /etc /passwd //논리 AND, $1은 메일과 일치합니다. 및 $3>8

awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwd

awk -F: '$1 ~/mail/ || $3>1000 {print }' /etc/passwd //논리 OR

awk -F: '{if($1~/mail / || $3>1000) print } ' /etc/passwd

수치 연산

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 // A Division

AWK'/Memfree/{Print INT ($ 2/1024)} '/ProC/Meminfo // 전체 가져오기

출력 구분 기호 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, 탭을 사용하여 필드를 구분합니다

명령 코드에서 처리 결과를 파일

①에 출력합니다. 블록 경로에서 직접 출력 -n |awk 'NR!=1{print > "./fs"}'

②출력 경로에 리디렉션 사용 -n|awk 'NR!=1{print} ' >

형식화된 출력

netstat -anp|awk '{printf "%-8s %-8s %-10sn",$1,$2 ,$3}'

printf는 형식 출력을 나타냅니다.

% 형식화된 출력 구분 기호

-8 길이는 8자입니다.

s는 문자열 유형을 나타냅니다.

각 줄의 처음 세 필드를 인쇄합니다. , 첫 번째 필드는 문자열 유형(길이 8)을 출력하도록 지정하고, 두 번째 필드는 문자열 유형(길이 8)을 출력하도록 지정합니다.

세 필드는 문자열 유형(길이 10)을 출력합니다.

netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-10s %-10s %-10s n" ,$1,$2,$3}'

netstat -anp |awk '$6=="LISTEN" || NR==1 {printf "%-3s %-10s %-10s %-10s n", NR,$1,$2,$3}'

IF 문

awk -F: '{if($3>100) print "large"; else print " small"}' /etc/passwd

small

작음

작음

작음

작음

awk -F: 'BEGIN{A=0; B=0} {if($3>100) {A++; "큰" 인쇄} else {B++; "작은" 인쇄}} END{print A, "T", B} ' /ETC /PASSWD

// ID가 100보다 크면 A 더하기 1, 그렇지 않으면 B 더하기 1

AWK -F:' {if ($ 3 & lt; 100) next; else print}' /etc/passwd                                                  ~에 100~100~100)

awk -F: 'BEGIN{i=1} {if(i

awk -F: 'BEGIN{i=1} {if(i

另一种shape式

awk -F: '{print ($3>100 ? " yes":"no")}'  /etc/passwd 

awk -F: '{print ($3>100 ? $3":tyes":$3":tno")}'  /etc/passwd

 

while语句

awk -F: 'BEGIN{i=1} {while(i

7 루트 1

7 x 2

7 0 3

7 0 4

7 루트 5

7 /root 6

 

数组

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 n", i,"t",a[i]}'

9523                             1     

9929                              1     

듣기                            6     

7903                               1     

3038/cupsd                   1     

7913                              1     

10837                           1     

9833                               1    

 

应용1

awk -F: '{print NF}' helloworld.sh                                                   //输出文件每行有多少字段

awk -F: '{$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                                             //결정 3个分隔符,并输流每行字段数

awk -F'[:#/]' '{print $1,$2,$3,$4 ,$5,$6,$7,$8 ,$9,$10,$11,$12}' helloworld.sh     //system表符分隔输多字段

 

应용4

计算/home目录下,普文文件적대소, 使사용KB작화为单位

ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "총 크기:",sum/1024," KB"}'

ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "총 크기:",int(sum/1024)," KB"}'         //int是取整的意思

 

应用5

统计netstat -anp 状态为LISTEN 및 CONNECT的连接数分别是多少

netstat -anp|awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i 합계) printf "%-10s %-6s %-3s n", i," " ,sum[i]}'

 

应용6

统计/home目录下不同用户的普文是多少?

ls - l|awk 'NR!=1 && !/^d/{sum[$3]++} END{for (i 합계) printf "%-6s %-5s %-3s n",i," ",sum [i]}'   

mysql        199 

root           374 

统计/home目录下는 다른 용도로 사용하기 어려운 普文文件的大小总size是多少?

ls -l|awk 'NR!=1 && !/^d/{sum[$3]+=$5} END{for (i 합계) printf "%-6s %-5s %-3s %-2s n", i," ",sum[i]/1024/1024,"MB"}'

응용프로그램 7

출력점수표

awk 'BEGIN{math=0;eng=0;com=0;printf "Lineno. Name No. Math 영어 Computer Totaln";printf "------------------------------- -- ------------------n"}{math+=$3; eng+=$4; com+=$5;printf "%-8s %-7s %-7s %-7s %-9s %-10s %-7s n",NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf "---------------- --- --------------n";printf "%- 24s % -7s %-9s %-20s n","총계:",math,eng,com;printf "%-24s %-7s %-9s %-20s n","Avg:",math/NR, eng/ NR,com/NR}' test0


[root@localhost home]# cat test0

결혼 2143 78 84 77

잭 2321 66 78 45

TOM 2122 48 77 77 71

Mike 2537 87 97 97 95

Bob 2415 40 57 62

>


리눅스 awk 명령어에 대한 더 자세한 설명은 PHP 중국어 홈페이지를 참고해주세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)