중화사전망 - 서예자전 - Linux awk 명령

Linux awk 명령

1.awk 는 강력한 텍스트 분석 도구입니다. Awk 는 grep 검색 및 sed 편집에 비해 데이터 분석 및 보고서 생성 시 특히 강력합니다. 간단히 말해서, awk 는 한 줄씩 파일을 읽고 공백을 기본 구분 기호로 사용하여 각 줄을 슬라이스한 다음 잘라낸 부분을 분석하는 것입니다.

둘. Awk 명령 형식 및 옵션

2. 1 awk 의 구문에는 두 가지 형식이 있습니다

1. 명령행 모드

Awk [-f 필드 구분 기호] 명령 입력 파일

여기서 commands 는 실제 awk 명령이고 [-F 도메인 구분 기호] 는 선택 사항입니다. 입력 파일은 처리할 파일입니다.

Awk 에서는 파일의 각 행에서 도메인 구분 기호로 구분된 각 항목을 도메인이라고 합니다. 일반적으로 기본 필드 구분 기호는 -F 필드 구분 기호로 이름이 지정되지 않은 공백입니다.

2. 모든 awk 명령을 별도의 파일에 삽입하고 다음을 호출합니다.

Awk-f awk- 스크립트 파일 입력 파일

여기서 -f 옵션은 awk-script-file 에서 awk 스크립트를 로드하고 입력 파일은 위와 같습니다.

2.2 명령 옵션

(1) -F fsor-field-separator fs: 입력 파일의 구분 기호를 지정하고 fs 는 문자열 또는 정규식입니다 (예:-f:).

(2)-v var = value 또는 -asignvar = value: 사용자 정의 변수를 할당합니다.

(3)-f 스크립트 파일 또는 -file 스크립트 파일: 스크립트 파일에서 awk 명령을 읽습니다.

(4)-mf nnn 및 -mr nnn: nnn 값에 대한 고유 제한을 설정하고 -MF 옵션은 nnn 에 할당된 최대 블록 수를 제한합니다. -mr 옵션은 최대 레코드 수를 제한합니다. 이 두 함수는 벨 랩 awk 의 확장 함수이며 표준 awk 에는 적용되지 않습니다.

(5)-w compat 또는 -compat, -w traditional 또는 -traditional: 호환 모드에서 awk 를 실행합니다. 따라서 gawk 는 표준 awk 와 동일하게 동작하며 모든 awk 확장은 무시됩니다.

(6)-w copy left 또는 -copyleft, -w copyright 또는 -copyright: 간단한 저작권 정보를 인쇄합니다.

(7)-w help 또는 -help, -w usage 또는 -usage: 모든 awk 옵션과 각 옵션에 대한 간단한 설명을 인쇄합니다.

(8)-w lintor-lint: 기존 UNIX 플랫폼으로 마이그레이션할 수 없는 구조에 대한 경고를 인쇄합니다.

(9)-9)-W lint-old 또는-lint-old-old: 기존 UNIX 플랫폼으로 마이그레이션할 수 없는 구조에 대한 경고를 인쇄합니다.

(10)-W POSIX: 호환성 모드를 켭니다. 그러나 /x, function 키워드, func, 이스케이프 시퀀스, fs 가 공백일 때 새 행을 필드 구분 기호로 사용하는 제한 사항이 있습니다. 연산자 * * 및 * = 는 and =;; Fflush 가 잘못되었습니다.

(1 1)-w re-interval 또는 -re-inerval: 괄호 표현식과 같은 간격 정규식, 참조 (grep 의 Posix 문자 클래스) 를 허용합니다

(12)-w 소스 프로그램-텍스트 또는-소스 프로그램-텍스트: 프로그램-텍스트를 소스 코드로 사용하여 -f 명령과 혼합할 수 있습니다.

(13)-w 버전 또는 -version: 오류 보고 정보의 버전을 인쇄합니다.

셋. 사용 방법

# awk "{모드+동작}" {파일 이름}

작업은 복잡할 수 있지만 구문은 항상 이와 같습니다. 여기서 패턴은 AWK 가 데이터에서 찾는 내용을 나타내고 작업은 일치하는 내용을 찾을 때 실행되는 일련의 명령입니다. 중괄호 ({}) 는 프로그램에서 항상 나타날 필요는 없지만 특정 패턴에 따라 일련의 명령을 그룹화하는 데 사용됩니다. 패턴은 사선으로 둘러싸인 표현할 정규 표현식입니다.

Awk 언어의 가장 기본적인 기능은 지정된 규칙에 따라 파일 또는 문자열에서 정보를 찾아보고 추출하는 것입니다. Awk 에서 정보를 추출한 후 추가 텍스트 작업을 수행할 수 있습니다. 완전한 awk 스크립트는 일반적으로 텍스트 파일의 정보 서식을 지정하는 데 사용됩니다.

일반적으로 awk 는 파일의 한 단위로 간주됩니다. Awk 는 파일의 각 줄을 수신한 다음 적절한 명령을 실행하여 텍스트를 처리합니다.

넷. 방법 및 운영

Awk 스크립트는 모드와 작업으로 구성됩니다.

모드 {action} 예: $ awk "/root/"테스트 또는 $ awk "$3

둘 다 선택 사항입니다. 모드가 없으면 모든 레코드에 작업이 적용됩니다. 작업이 없으면 출력은 모든 레코드와 일치합니다. 기본적으로 각 입력 행은 레코드이지만 RS 변수로 다른 구분 기호를 지정하여 구분할 수 있습니다.

4. 1.mode

이 모드는 다음 중 하나일 수 있습니다.

(1) 정규식: 와일드카드를 사용하는 확장 세트입니다.

(2) 관계 표현식: 다음 연산자 테이블의 관계 연산자, character(3) 문자열 또는 숫자 비교 (예: $2 ") 로 연산할 수 있습니다. % 1 두 번째 필드가 첫 번째 필드보다 긴 행을 선택합니다.

(4) 패턴 일치 표현식: ~(match) 및 ~! (일치하지 않음).

(5) 모드: 선의 범위를 지정합니다. 구문에는 시작 모드와 종료 모드를 포함할 수 없습니다.

(6) 시작: 사용자가 첫 번째 입력 레코드를 처리하기 전에 발생하는 동작을 지정할 수 있습니다. 일반적으로 전역 변수는 여기에서 설정할 수 있습니다.

(7) 끝: 마지막 입력 레코드를 읽은 후 사용자가 조치를 취할 수 있도록 합니다.

4.2. 운영

작업은 하나 이상의 명령, 함수 및 표현식으로 구성되며 줄 바꿈 또는 세미콜론으로 구분되며 중괄호로 묶여 있습니다. 네 가지 주요 부분이 있습니다.

(1) 변수 또는 배열 할당

② 출력 명령

③ 내장 기능

④ 흐름 제어 명령

동사 (verb 의 약어) awk 의 환경 변수

6.awk 운영자

일곱. 레코드 및 도메인

7. 1. 레코드

Awk 에서는 줄 바꿈으로 끝나는 각 줄을 레코드라고 합니다.

레코드 구분 기호: 기본 입력 및 출력 구분 기호는 내장 변수 ORS 및 RS 에 저장되는 캐리지 리턴입니다.

$0 변수: 전체 레코드를 나타냅니다. 예를 들어, $ awk“{ print $0} "테스트는 테스트 파일의 모든 레코드를 출력합니다.

변수 NR: 카운터. 각 레코드가 처리될 때마다 NR 값이 1 씩 증가합니다.

예를 들어, $ awk "{printnr, $0}" 테스트는 테스트 파일의 모든 레코드를 출력하고 레코드 앞에 레코드 번호를 표시합니다.

7.2. 영역

레코드의 각 단어를 필드라고 하며 기본적으로 공백이나 탭으로 구분됩니다. Awk 는 도메인 수를 추적하고 이 값을 내장된 변수 NF 에 저장할 수 있습니다. 예를 들어, $ awk "{print $1,$3}" 테스트는 테스트 파일에서 공백으로 구분된 첫 번째 및 세 번째 열 (필드) 을 인쇄합니다.

7.3. 도메인 구분 기호

내장 변수인 FS 는 입력 필드 구분 기호의 값을 저장합니다. 기본값은 space 또는 tab 입니다. -F 명령줄 옵션을 통해 FS 값을 수정할 수 있습니다. 예를 들어 $ awk-f: "{print $1,$5}" 테스트는 콜론으로 구분된 첫 번째 열과 다섯 번째 열의 내용을 인쇄합니다.

여러 필드 구분 기호를 동시에 사용할 수 있으므로 대괄호 안에 구분 기호를 넣어야 합니다 (예: $ awk-f' [:/t]' {print $1,$3 }‘test, 즉 공백,)

기본적으로 출력 필드의 구분 기호는 OFS 에 저장된 공백입니다. 예를 들어, $ awk-f 사이의 쉼표: "{print $ 1, $5}" 테스트, $ 1 과 $5 사이의 값은 OFS 의 값입니다.

여덟. 일치 연산자 (~)

레코드 또는 필드의 정규 표현식을 일치시키는 데 사용됩니다. 예를 들어, $ awk' $1~/root/'test 는 테스트 파일의 첫 열에 root 로 시작하는 행을 표시합니다.

아홉. 비교 표현

조건식 1? 표현 2: 표현 3,

예를 들면 다음과 같습니다.

$ awk "{max = {$1> $3}? $ 1: $3: 최대 인쇄량}' 테스트. 첫 번째 필드가 세 번째 필드보다 크면 max 에 $ 1 을 할당하고 그렇지 않으면 max 에 $3 을 할당합니다.

$ awk' $1+$2 < 100' 테스트. 첫 번째와 두 번째 필드의 합계가 100 보다 크면 해당 행이 인쇄됩니다.

$ awk' $1> 5&& $2< "10" 테스트. 첫 번째 필드가 5 보다 크고 두 번째 필드가10 보다 작을 경우 행이 인쇄됩니다.

X. 범위 템플릿

범위 템플릿 일치 첫 번째 템플릿부터 두 번째 템플릿까지 처음 나타나는 모든 행. 템플릿이 나타나지 않으면 시작 또는 끝과 일치합니다. 예를 들어, $ awk "/root/,/mysql/" 테스트는 root 의 첫 발생과 MySQL 의 첫 발생 사이의 모든 행을 표시합니다.