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

awk 명령에 대한 자세한 설명

高洛峰
풀어 주다: 2016-12-15 10:36:23
원래의
1346명이 탐색했습니다.

awk 명령에 대한 자세한 설명

간단한 사용법:

awk: 파일의 각 줄에 대해 작업을 수행합니다.

awk -F: '{print $1,$4}' : ':'을 사용하여 이 줄을 분할하고 이 줄의 첫 번째와 네 번째 필드를 인쇄합니다.

상세 소개:

AWK 명령어 소개

awk 언어의 가장 기본적인 기능은 파일이나 문자열에 지정된 규칙을 기반으로 정보를 찾아 추출합니다. awk가 정보를 추출한 후에만 다른 텍스트 작업을 수행할 수 있습니다. 완전한 awk 스크립트는 일반적으로 텍스트 파일의 정보 형식을 지정하는 데 사용됩니다. 1. awk 호출:

첫 번째 명령줄 방법:

awk [-Field-separator] 'commands' input- file(s)

여기에 있는 명령은 실제 ​​awk 명령이고, [-F 도메인 구분 기호]는 선택 사항이며, awk는 기본적으로 공백을 사용하여 구분하므로 탐색하려는 경우 도메인 사이의 공백 이 옵션을 지정할 필요는 없지만 passwd와 같은 파일을 탐색하고 이 파일의 각 필드가 구분 기호로 콜론을 사용하는 경우 -F 옵션을 사용해야 합니다: awk -F : 'commands' input-file

둘째, 모든 awk 명령을 파일에 삽입하고 awk 프로그램을 실행 가능하게 만든 다음 awk 명령 해석기를 스크립트의 첫 번째 줄로 사용하여 다음을 호출할 수 있습니다.

세 번째로 모든 awk 명령을 별도의 파일에 삽입한 후 다음과 같이 호출합니다.

awk -f awk-script-file input-file

-f 옵션은 awk-script-file 파일에 awk 스크립트를 지정하고, input-file은 awk를 사용하여 검색한 파일 이름입니다

2. awk 스크립트 :

awk 스크립트는 구분 기호(-F 옵션)에 따라 다양한 동작과 모드로 구성됩니다. .읽은 내용은 해당 필드에 차례대로 배치됩니다. 파일 끝까지 읽은 것을 기록합니다

2.1 모드 및 동작

모든 awk 문은 모드와 동작으로 구성됩니다. awk에는 스크립트에 많은 문이 있을 수 있습니다. 모드 부분은 작업 명령문이 실행되고 이벤트가 트리거되는 시기를 결정합니다. 액션은 데이터에 대한 작업입니다. 패턴 부분이 생략되면 액션은 항상 실행 상태로 유지됩니다.

패턴은 조건문이나 복합문 또는 정규 표현식일 수 있습니다. 두 개의 특수 필드 BEGIN 및 END가 포함되어 있으며 BEGIN 문을 사용하여 카운트 및 인쇄 헤드를 설정합니다. BEGIN 문은 텍스트 탐색 작업 전에 사용되며 입력 파일을 기반으로 텍스트 탐색 작업이 실행됩니다. awk가 텍스트 탐색 작업을 완료한 후 총 텍스트 수를 인쇄하려면 작업을 {}

로 묶어야 합니다. 실제 작업은 중괄호 {} 안에 지정됩니다. 이는 작업 인쇄에 일반적으로 사용되지만 if 및 루프 문 및 루프 종료 등과 같은 더 긴 코드도 있습니다. 수행할 작업을 지정하지 않으면 awk는 기본적으로 탐색된 모든 레코드를 인쇄합니다

2.2. 도메인 및 레코드:

awk가 실행되면 검색 태그는 $1, $2...$n입니다. 첫 번째와 세 번째 필드를 참조하려면 $1과 $3을 사용하세요. 쉼표는 필드를 구분하는 데 사용되며 $0은 모든 필드를 사용한다는 의미입니다. 예:

awk '{print $0}' temp.txt > sav.txt

는 모든 필드를 인쇄하고 결과를 리디렉션하는 것을 의미합니다. sav.txt로 이동

awk '{print $0}' temp.txt|tee sav.txt

위의 예와 유사합니다. 하지만 화면에는 다르게 표시됩니다

awk '{print $1,$4}' temp.txt

첫 번째와 도메인 4

awk 'BEGIN {print "NAME GRADEn----"} {print $1"t"$4}' temp.txt

는 메시지 헤더를 입력한다는 의미입니다. 즉, 입력 내용의 첫 번째 줄 앞에 "NAME GRADEn-------------"를 추가하고 탭

awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp

헤더와 트레일러를 동시에 인쇄

2.3. 조건 연산자:

=, ~는 정규식과 일치합니다. ,!~ 정규 표현식

과 일치하지 않습니다. 일치: awk '{if ($4~/ASIMA/) print $0}' temp는 네 번째 필드에 ASIMA가 포함되어 있으면 전체를 인쇄함을 의미합니다. line

완전 일치: awk '$3=="48" {print $0}' temp 세 번째 필드가 "48"인 레코드만 인쇄

불일치: awk '$0 !~ /ASIMA/' temp ASIMA를 포함하지 않는 전체 레코드를 인쇄합니다.

같지 않음: awk '$1 != "asima"' 온도

미만: awk '{if ($1

케이스 설정: awk '/[Gg]reen/' temp Green 또는 green

을 포함하는 전체 레코드를 인쇄합니다. 모든 문자: awk '$1 ~/^...a/' temp 첫 번째 필드의 네 번째 문자를 인쇄합니다. '^' 기호는 줄의 시작을 나타내고 '.'은 모든 문자를 나타냅니다.

또는 관계형 일치: awk '$0~/(abc)|(efg)/' temp 사용 | 언제, 명령문을 괄호로 묶어야 하는지

AND 관계: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp

OR: awk '{if ($1=="a" || $1=="b") print $0}' 임시

2.4 . awk 내장 변수:

awk 명령에 대한 자세한 설명

예: awk 'END {print NR}' temp 마지막에 읽은 레코드 수를 인쇄합니다.

awk '{print NF, NR, $0} END {print FILENAME}' temp

awk '{if (NR>0 && $4~/Brown/) print $0}' temp 최소한 하나의 레코드가 존재하고 Brown을 포함합니다

NF의 또 다른 사용법: echo $PWD | awk -F/ '{print $NF}' 현재 디렉토리 이름 표시

2.5. awk 연산자:

awk에서 연산자를 사용하면 기본 표현식을 숫자 유형, 문자열 유형, 변수 유형, 필드로 나눌 수 있습니다. 및 배열 요소

는 입력 필드를 변수 이름으로 설정합니다.

awk '{name=$1;six=$3; =="man ") 인쇄 이름 "은 " six}' temp

도메인 값 비교 작업:

awk 'BEGIN {BASE= "27"} {if ($4

숫자 필드의 값 수정: (원래 입력 파일은 변경되지 않음)

awk '{if ($1=="asima") $6=$6-1;print $1, $6, $7}' temp

텍스트 수정 필드:

awk '{if ($1=="asima) ($1=="desc");print $1}' 임시

수정 기록만 표시:( 필요한 것만 표시합니다. 이전 명령과 다름, 참고 {})

awk '{if ($1=="asima) {$1== "desc";print$1}} ' temp

새 출력 필드 만들기:

awk '{$4=$3-$2; $4}' temp

통계 열 값:

awk '(tot+=$3);END {print tot}' temp는 다음을 표시합니다. 각 열의 내용

awk '{(tot+=$3)};END {print tot}' temp 최종 결과만 표시

파일 길이를 추가하세요:

ls -l|awk '/^[^d]/ {print $9"t"$5} {tot+=$5} END{print "totKB:" tot}'

파일 이름만 나열:

ls -l|awk '{print $9}' 일반적으로 파일 이름은 9번째입니다. domain

2.6. awk 내장 문자열 함수:

gsub(r, s) $0 전체에서 r을 s로 바꿉니다

awk 'gsub(/name/,"xingming") {print $0}' temp

gsub(r, s, t) r 교체 t 전체에 s 포함

index(s, t) s에서 문자열 t의 첫 번째 위치를 반환합니다.

awk 'BEGIN {print index("Sunny", "ny ")}' temp는 4를 반환합니다

length(s) s의 길이를 반환합니다

match( s, r) s에 일치하는 r 문자열이 포함되어 있는지 테스트합니다

awk '$1=="J.Lulu" {print match($1, "u")}' temp Return 4

split(s, a, fs) s를 fs의 시퀀스 a로 나눕니다

awk 'BEGIN {print Split("12#345# 6789",myarray,"# ")"'

3을 반환하고 while myarray[1]="12", myarray[2]="345", myarray[3]="6789"

sprint(fmt, exp ) fmt 형식의 exp 일치 문자열을 반환합니다.)

substr(s, p) 문자열 s에서 p로 시작하는 접미사 부분을 반환합니다.

substr(s, p , n) 문자열 s에서 p로 시작하고 길이가 n인 접미사 부분을 반환합니다.

2.7 printf 함수 사용:

문자 변환 : echo "65" |awk '{printf "%cn",$0}' 출력 A

awk 'BEGIN {printf "%fn",999}' 출력 999.000000

형식화된 출력: awk '{printf "%-15s %sn", $1, $3}' temp는 첫 번째 필드를 모두 왼쪽 정렬하여 표시합니다.

2.8. 기타 awk 사용법:

awk 명령 줄에 값 전달:

awk '{if ($5

who | awk '{if ($1==user) print $1 " are in " $2 ' user=$LOGNAME 환경 변수 사용

awk 스크립트 명령:

시작 부분에 !/bin/awk -f를 사용하세요. -포함된 스크립트는 실행되지 않습니다. 예:

!/bin/awk -f

# 모든 주석 줄은 해시로 시작해야 합니다. '#'

# 이름: Student_tot.awk

# 호출: Student_tot.awk grade.txt

#동아리 학생 포인트의 총합과 평균을 인쇄합니다

# 헤더를 먼저 인쇄합니다

BEGIN

{

print "학생 일자 회원번호 학년 연령 포인트 최대"

print "이름 가입 포인트 적립 가능" "

인쇄"================================== ============= =========="

}

# 획득한 점수를 더해봅시다

(tot+=$6);

# 처리가 완료되었습니다. 이제 총점과 평균점을 출력해 보겠습니다

END

{

인쇄 "동아리 학생 총점:" tot

"평균 동아리 학생 포인트:" tot/N

}

2.9.9. >

awk 루프 기본 구조

For(배열의 요소) 인쇄 array[요소]

awk 'BEGIN {record="123#456#789" ;split(record, myarray, "#")}

END { for (i in myarray) {print myarray[i] } }

3.0 awk의 맞춤문

1. 조건부 판단문(if)

if (표현식) #if ( 배열의 변수 )

문 1

else

문 2

형식에서 "문 1"은 여러 문이 될 수 있습니다. Unix의 awk 판단과 읽기를 용이하게 하려면 {}로 여러 문을 묶는 것이 좋습니다. Unix awk 분기 구조는 중첩을 허용하며 해당 형식은 다음과 같습니다.

if(expression)

{Statement 1}

else if(expression)

{ 명령문 2}

else

{문 3}

[chengmo@localhost nginx]# awk 'BEGIN{
test=100;
if(test>90)
{

"매우 좋음" 인쇄;

}
else if(test>60)
{
"좋음" 인쇄;
}
else
{
" 인쇄 no pass";
}
}'

very good


각 명령문은 ";" 기호로 끝날 수 있습니다.

2. 루프문(while, for, do)

1. while 문

형식:

while(표현식) 공식)

{문}

예:

[chengmo@localhost nginx]# awk 'BEGIN{

test=100;

total=0;

while(i{

total+=i;
i++;
}
print total;
}'
5050

2.for 루프

for 루프에는 두 가지 형식이 있습니다.

형식 1:

for(배열의 변수)

{statement}

예:

[chengmo@localhost nginx]# awk 'BEGIN{

for(k in ENVIRON)

{

print k"="ENVIRON[k];

}

}'

AWKPATH=.:/usr/share/awk
OLDPWD=/home/web97
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SELINUX_LEVEL_REQUESTED=

SELINUX_ROLE_REQUESTED=

LANG=zh_CN.GB2312

. . . . . .

설명: ENVIRON은 awk 상수이자 하위 일반적인 배열입니다.

형식 2:

for(변수; 조건; 표현식)

{statement}

예:

[chengmo@ localhost nginx]# awk 'BEGIN{
total=0;
for(i=0;i{
total+=i;
}
전체 인쇄 ;
}'

5050

3.do 루프

형식:

do

{statement}while( 조건 )

예:

[chengmo@localhost nginx]# awk 'BEGIN{
total=0;
i=0;
do
{
total+=i;
i++;
}while(iprint total;
}'
5050

이상 구문에서 볼 수 있듯이 awk 흐름 제어 문입니다. C 언어와 동일합니다. 이러한 명령문을 사용하면 실제로 많은 쉘 프로그램을 awk로 전달할 수 있으며 성능이 매우 빠릅니다.

awk 명령에 대한 자세한 설명


awk 명령어 관련 더 자세한 글은 PHP 중국어 홈페이지를 참고해주세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿