> php教程 > PHP开发 > 본문

Linux Shell에서 awk 명령 사용

高洛峰
풀어 주다: 2016-12-15 11:35:05
원래의
1683명이 탐색했습니다.

awk 명령

awk도 데이터 처리 도구입니다! 전체 라인을 처리하는 경우가 많은 sed에 비해 awk는 여러 필드로 나누어진 라인을 처리하는 것을 선호합니다.


awk 언어의 가장 기본적인 기능은 지정된 규칙에 따라 파일이나 문자열의 정보를 분해하고 추출하는 것이며, 지정된 규칙에 따라 데이터를 출력할 수도 있습니다.


awk를 호출하는 방법에는 세 가지가 있습니다


1. 명령줄 모드

awk [-F field-separator] 'commands' input-files

그 중 [-F field 구분자]는 awk가 공백이나 탭 키를 기본으로 사용하므로 선택 사항입니다. 도메인 구분 기호, 필드 사이에 공백이 있는 텍스트를 찾아보려는 경우 콜론이 각 도메인의 구분 기호로 사용되는 passwd와 같은 파일을 찾아보려는 경우 -F를 지정해야 합니다. 옵션(예: awk -F: 'commands' 입력 파일)

참고: Linux 시스템에서는 IFS 환경 변수를 사용하여 구분 기호를 저장하지만 IFS 값은 실제 애플리케이션에 따라 변경될 수도 있습니다.

예:

Linux Shell에서 awk 명령 사용

스크립트 실행 결과는 다음과 같습니다.

Linux Shell에서 awk 명령 사용

commands는 실제 awk 명령이고, input-files는 해당 파일입니다. 처리됩니다.

iput_files는 두 개 이상의 파일로 구성된 파일 목록일 수 있으며, awk는 목록에 있는 각 파일을 순서대로 처리합니다.

awk에서는 파일의 각 줄에서 필드 구분 기호로 구분된 각 항목을 필드라고 합니다. 일반적으로 -F 필드 구분 기호를 지정하지 않으면 기본 필드 구분 기호는 공백 또는 탭입니다.


2. 쉘 스크립트 방식

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

은 쉘 스크립트의 첫 번째 줄과 동일합니다: #!/bin/sh는 다음으로 대체될 수 있습니다: #!/bin/awk


3 . 모든 awk 명령을 단일 파일에 삽입한 후 다음을 호출합니다.

Awk -f awk-script-file input-files

그 중 -f 옵션은 awk-script-에서 awk를 로드합니다. file 스크립트, input-files는 위와 동일합니다.


awk의 패턴과 액션


모든 awk 문은 패턴과 액션으로 구성됩니다(awk_pattern { actions }). .
awk 스크립트에는 많은 문이 있을 수 있습니다.

모드 부분은 액션 문이 언제 이벤트를 발생시키고 발생시키는지를 결정합니다. 처리는 데이터에 대해 수행되는 작업입니다. 모드 부분이 생략되면 작업은 항상 실행된 상태로 유지됩니다. 즉, 생략할 경우 입력된 레코드를 일치, 비교하지 않고 해당 액션을 실행하게 됩니다.


패턴은 조건문이나 정규식 등이 될 수 있습니다. awk_pattern은 다음 유형일 수 있습니다.


1) 정규 표현식은 awk_pattern:/regexp/

예: awk '/^[a-z ] /' input_file

2) awk_pattern으로 Boolean 표현식을 사용합니다. 표현식이 성립되면 해당 액션이 실행됩니다.

① 변수(예: 필드 변수 $1, $2 등) 및 /regexp/

② 부울 표현식의 연산자를 사용할 수 있습니다:


관계 연산자: = == !=
일치 연산자: value ~ /regexp/ 값이 /regexp/와 일치하면 true를 반환합니다
value !~ /regexp/ 값이 /regexp/와 일치하지 않으면 true를 반환합니다.
예: awk '$2 > 10 {print "ok"}' input_file
awk '$3 ~ /^d/ {print"ok "}' input_file

3 &&(and) 및 ||(or)는 두 개의 /regexp/ 또는 부울 표현식을 연결하여 혼합 표현식을 형성할 수 있습니다. !(not)은 부울 표현식이나 /regexp/ 앞에 사용할 수 있습니다.


예: awk '($1 10) {print "ok"}' input_file
awk '/^d/ | /x$/ {print "ok"}' input_file

패턴에는 BEGIN 및 END라는 두 개의 특수 필드가 포함되어 있습니다. BEGIN 문을 사용하여 개수와 프린트 헤드를 설정합니다. BEGIN 문은 텍스트 찾아보기 작업 전에 사용되며, 그 후에는 입력 텍스트를 기반으로 텍스트 찾아보기 작업이 실행되기 시작합니다. END 문은 awk가 텍스트 탐색 작업을 완료한 후 총 텍스트 수와 종료 상태 플래그를 인쇄하는 데 사용됩니다.


실제 작업은 중괄호 { } 안에 지정됩니다. 액션은 주로 인쇄에 사용되지만 if 및 루프 문, 루프 종료 구조와 같은 더 긴 코드도 있습니다. 작업이 지정되지 않으면 awk는 탐색된 모든 레코드를 인쇄합니다.


awk가 실행되면 브라우징 도메인이 $1, $2...$n으로 표시됩니다. 이 방법을 도메인 식별이라고 합니다. 이러한 도메인 식별자를 사용하면 도메인을 더 쉽게 처리할 수 있습니다.


첫 번째와 세 번째 필드를 참조하려면 $1과 $3를 사용하세요. 필드를 구분하는 데 쉼표가 사용됩니다.

5개 필드가 있는 레코드의 모든 필드를 인쇄하려면 $1, $2, $3, $4, $5를 지정할 필요가 없습니다. 이는 모든 필드를 의미합니다.

필드 하나 또는 전체를 인쇄하려면 인쇄 명령을 사용하세요. 이것은 awk 작업입니다


awk의 실행 프로세스:

① BEGIN 블록이 있으면 awk는 해당 블록에 지정된 작업을 실행합니다.

② awk는 입력 레코드라고 하는 입력 파일에서 한 줄을 읽습니다. (입력 파일을 생략하면 표준 입력에서 읽습니다.)

3 awk는 읽은 레코드를 필드로 분할하고 첫 번째 필드를 변수 $1에 두 번째 필드를 $2에 넣는 식으로 에. $0은 전체 레코드를 나타냅니다.

④ 현재 입력된 레코드와 각 awk_cmd의 awk_pattern을 비교하여 일치하는지 확인하고, 일치하면 해당 액션을 실행합니다. 일치하는 항목이 없으면 모든 awk_cmd가 비교될 때까지 해당 작업을 건너뜁니다.

⑤ 입력 레코드가 모든 awk_cmd를 비교하면 awk는 입력의 다음 줄을 읽고 awk가 파일의 끝을 읽을 때까지 계속해서 ③과 ④ 단계를 반복합니다.

⑥awk가 모든 입력 라인을 읽은 후 END가 존재하면 해당 작업이 실행됩니다.


시작하기 예:

예 1: /etc/passwd 파일에 사용자 이름과 로그인 셸 표시

Linux Shell에서 awk 명령 사용

/etc/passwd의 계정과 해당 계정에 해당하는 쉘만 표시되고, 계정과 쉘이 탭키로 구분되어 있는 경우

Linux Shell에서 awk 명령 사용

/etc/만 표시되는 경우 passwd 파일에 사용자 이름과 로그인 쉘이 있고, 계정과 쉘이 쉼표로 구분되어 있습니다.

Linux Shell에서 awk 명령 사용

참고: awk는 항상 표준 출력. awk를 파일로 출력하려면 리디렉션을 사용할 수 있습니다.


예 2: /etc/passwd 파일에서 UID가 500보다 큰 모든 사용자의 사용자 이름과 로그인 셸을 표시합니다

Linux Shell에서 awk 명령 사용

예 3: /etc/passwd 파일에 UID가 500보다 큰 사용자 이름과 로그인 쉘만 표시하고 계정과 쉘을 쉼표로 구분하고 열 이름 name, shell을 추가하는 경우 모든 라인 및 " blue,/bin/nosh".

Linux Shell에서 awk 명령 사용

참고:

1.awk 뒤에는 데이터에 대해 수행하려는 처리 작업을 설정하기 위한 두 개의 작은따옴표와 중괄호 {}가 옵니다.

2.awk 작업 흐름은 다음과 같습니다. 먼저 BEGING을 실행한 다음 파일을 읽고 n개의 줄 바꿈으로 구분된 레코드를 읽은 다음 지정된 필드 구분 기호에 따라 레코드를 필드로 나누고 $0은 필드를 채웁니다. 모든 도메인에서 $1은 첫 번째 도메인을 나타내고 $n은 n번째 도메인을 나타내며 패턴에 해당하는 작업 실행을 시작합니다. 그런 다음 모든 레코드를 읽을 때까지 두 번째 레코드 읽기를 시작하고 마지막으로 END 작업을 수행합니다.

생각하는 질문: 모든 레코드를 인쇄하는 방법(/etc/passwd의 내용을 예로 들어)

Linux Shell에서 awk 명령 사용

예 4: /etc/passwd 검색 for root

Linux Shell에서 awk 명령 사용

키워드의 모든 행은 패턴 사용의 예입니다. 패턴(여기서는 루트)과 일치하는 행만 작업을 실행합니다(작업이 지정되지 않음, 각 행의 내용). 기본적으로 출력됩니다).

검색은 정규식을 지원합니다. 예를 들어 root로 시작하는 항목을 찾습니다.

Linux Shell에서 awk 명령 사용

/etc/passwd에서 root 키워드가 있는 모든 줄을 검색하고 해당 쉘 표시

Linux Shell에서 awk 명령 사용

여기에 지정된 작업은 {print $7}


예 5: 가장 많은 5개 표시 최근 시스템 로그인 사용자 정보, 사용자 이름과 IP 주소만 표시됩니다

마지막 명령을 사용하면 가장 최근에 로그인한 사용자 정보를 볼 수 있습니다. 아래 그림과 같이

Linux Shell에서 awk 명령 사용

awk 명령을 사용하여 사용자 이름 및 IP 영역 데이터를 추출합니다.

Linux Shell에서 awk 명령 사용

또는

Linux Shell에서 awk 명령 사용

Awk 내장 변수

Awk에는 환경 정보 설정을 위한 많은 내장 변수가 있습니다. 가장 일반적으로 사용되는 변수 중 일부는 다음과 같습니다.

FILENAME awk가 검색한 파일 이름

FS 명령줄과 동일한 입력 도메인 구분 기호 설정 -F 옵션

NF 검색된 도메인 수(각 줄( $0) 소유한 총 필드 수)

NR 읽은 레코드 수(awk에서 처리하는 데이터 행)


예 6: Statistics/ etc/passwd : 파일 이름, 각 줄의 줄 번호, 각 줄의 열 수, 해당 전체 줄 내용:

Linux Shell에서 awk 명령 사용

모든 계정의 기록을 해당 번호와 함께 표시하고 인쇄합니다. END 섹션의 입력 파일 이름

Linux Shell에서 awk 명령 사용

awk의 내장 변수 외에도 awk는 변수를 사용자 정의할 수도 있습니다


예 7: /etc/passwd에서 계정 수 계산

Linux Shell에서 awk 명령 사용

count는 사용자 정의 변수입니다. 이전 작업에는 인쇄가 하나만 있었습니다{}. 실제로 인쇄는 단지 명령문일 뿐이며 작업{}은 ;로 구분된 여러 명령문을 가질 수 있습니다.

여기서는 count 초기화가 없습니다. 기본값은 0이지만 0으로 초기화하는 것이 적절합니다.

Linux Shell에서 awk 명령 사용

예 8: a 아래의 통계 특정 폴더 파일이 차지하는 바이트 수

Linux Shell에서 awk 명령 사용

M으로 표시되는 경우:

Linux Shell에서 awk 명령 사용

참고: 위 통계 디렉터리에 하위 파일을 포함하지 마십시오.

모든 파일의 길이와 합계를 빠르게 확인하고 하위 디렉터리를 제외하려면 방법:

Linux Shell에서 awk 명령 사용

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