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

명령, 구문 및 예제

awk 명령은 텍스트 파일 (특히 행 (행) 및 열로 구성된 데이터 파일)을 처리하거나 분석하는 강력한 방법입니다.

간단한 awk 명령은 명령 행 에서 실행할 수 있습니다. 더 복잡한 작업은 awk 프로그램 (소위 awk 스크립트)으로 파일에 작성해야합니다.

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

awk 'pattern {action}'input-file> 출력 파일

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

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

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

1, 저스틴 팀버레이크, 타이틀 545, 가격 $ 7.30 2, 테일러 스위프트, 타이틀 723, 가격 $ 7.90 3, 믹 재거, 타이틀 610, 가격 $ 7.90 4, 레이디 가가, 타이틀 118, 가격 $ 7.30 5, 조니 캐쉬, 타이틀 482, 가격 $ 6.50 6, 엘비스 프레슬리, 타이틀 335, 가격 $ 7.30 7, 존 레넌, 타이틀 271, 가격 $ 7.90 8, 마이클 잭슨, 타이틀 373, 가격 $ 5.50

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

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

열 구분 기호가 쉼표와 같이 공백이나 탭 이외의 것이면 awk 문에서 다음과 같이 지정할 수 있습니다.

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

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

타이틀 545 타이틀 723 타이틀 610 타이틀 118 타이틀 482 타이틀 335 타이틀 271 타이틀 373

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

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"이라는 문자열이 있으면 시스템은 해당 줄의 세 번째 줄에 요소를 인쇄합니다. 위 예제의 결과는 다음과 같습니다.

팀버 레이크, 가가, 프레슬리,

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

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

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

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

awk '{sum = 0; for (col = 1; col <= NF; col ++) sum + = $ col; 인쇄 합계; } '

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

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