Computer >> 컴퓨터 >  >> 체계 >> Linux

AWK 명령 및 스크립트 작성 방법

awk 명령은 텍스트 파일을 처리하거나 분석하는 강력한 방법입니다. 특히 행(행)과 ​​열로 구성된 데이터 파일을 분석한다. 간단한 awk 명령은 명령줄에서 실행할 수 있습니다. 더 복잡한 작업은 awk 프로그램(awk 스크립트라고 함)으로 파일에 작성해야 합니다.

AWK 명령 및 스크립트 작성 방법

AWK 기본 사항

awk 명령의 기본 형식은 다음과 같습니다.

awk 'pattern {action}' input-file > output-file

이것은 다음을 의미합니다. 입력 파일의 각 줄을 가져옵니다. 행에 패턴이 포함되어 있으면 행에 조치를 적용하고 결과 행을 출력 파일에 씁니다. 패턴을 생략하면 모든 행에 조치가 적용됩니다. 예:

awk '{ print $5 }' table1.txt > output1.txt

위의 명령문은 각 줄의 5번째 열 요소를 가져와서 출력 파일 "output.txt"에 줄로 씁니다. 변수 '$4'는 네 번째 열을 참조합니다. 마찬가지로 $1, $2, $3 등으로 첫 번째, 두 번째 및 세 번째 열에 액세스할 수 있습니다. 기본적으로 열은 공백이나 탭(소위 공백)으로 구분되는 것으로 가정합니다. 따라서 입력 파일 "table1.txt"에 다음 줄이 포함되어 있는 경우:

1, Justin Timberlake, Title 545, Price $7.30
2, Taylor Swift, Title 723, Price $7.90
3, Mick Jagger, Title 610, Price $7.90
4, Lady Gaga, Title 118, Price $7.30
5, Johnny Cash, Title 482, Price $6.50
6, Elvis Presley, Title 335, Price $7.30
7, John Lennon, Title 271, Price $7.90
8, Michael Jackson, Title 373, Price $5.50

그런 다음 명령은 출력 파일 "output1.txt"에 다음 줄을 씁니다.

545,
723,
610,
118,
482,
335,
271,
373,

열 구분 기호가 쉼표와 같이 공백이나 탭이 아닌 경우 다음과 같이 awk 문에서 지정할 수 있습니다.

awk -F, '{ print $3 }' table1.txt > output1.txt

열이 쉼표로 구분된 것으로 간주되는 경우 각 행의 열 3에서 요소를 선택합니다. 따라서 이 경우 출력은 다음과 같습니다.

Title 545
Title 723
Title 610
Title 118
Title 482
Title 335
Title 271
Title 373

AWK의 조건식

중괄호('{','}') 안의 문장 목록을 블록이라고 합니다. 블록 앞에 조건식을 넣으면 조건이 참인 경우에만 블록 안의 문장이 실행됩니다.

awk '$7=="\$7.30" { print $3 }' table1.txt

이 경우 조건은 $7=="\$7.30"이며, 이는 열 7의 요소가 $7.30과 같다는 것을 의미합니다. 달러 기호 앞의 백슬래시는 시스템이 $7을 변수로 해석하는 것을 방지하고 대신 달러 기호를 문자 그대로 사용하는 데 사용됩니다.

따라서 이 awk 문은 열 7에 "$7.30"이 있는 각 줄의 세 번째 열에 있는 요소를 인쇄합니다.

정규식을 조건으로 사용할 수도 있습니다. 예:

awk '/30/ { print $3 }' table1.txt

두 개의 슬래시('/') 사이의 문자열이 정규식입니다. 이 경우 문자열 "30"입니다. 즉, 라인에 "30" 문자열이 포함된 경우 시스템은 해당 라인의 세 번째 열에 있는 요소를 인쇄합니다. 위 예의 출력은 다음과 같습니다.

Timberlake,
Gaga,
Presley,

AWK에서 계산 수행

테이블 요소가 숫자인 경우 awk는 다음 예와 같이 해당 요소에 대해 계산을 실행할 수 있습니다.

awk '{ print ($2 * $3) + $7 }'

현재 행의 요소에 액세스하는 변수($1, $2 등) 외에 전체 행(라인)을 참조하는 변수 $0과 필드 수를 유지하는 변수 NF가 있습니다.

다음 예와 같이 새 변수를 정의할 수도 있습니다.

awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }'

이것은 각 행의 모든 ​​요소의 합계를 계산하고 인쇄합니다.

Awk 문은 종종 sed 명령과 결합됩니다.