본문 바로가기

IT's Life/Linux

자세한 Linux awk 명령


sed 명령을 사용하는 것 외에도 Linux 에는 awk 보다 강력한 텍스트 데이터 처리 도구가 있습니다. 1970 년대 후반에 탄생했으며 이는 많은 Linux 사용자에게 영향을 미치는 이유 중 하나 일 수 있습니다.

awk 명령의 이름은 어색한 단어에서 나온 것으로 추측되었습니다. 실제로이 순서에는 세 명의 디자이너가 있으며, 이들의 성은 Aho, Weingberger 및 Kernighan이며, Awk는 마스터의 성의 첫 글자에서 가져옵니다.

sed 명령과 유사하게, awk 명령은 파일을 한 줄씩 (1 행에서 마지막 행까지) 스캔하여 대상 텍스트를 포함하는 행을 찾습니다. 일치에 성공하면 사용자는 행에서 조작을 수행하려고합니다. 그렇지 않으면 올바르지 않습니다. 처리하십시오. 

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

[root @ localhost ~] # awk [옵션] '스크립트 명령'파일 이름


이 명령에 일반적으로 사용되는 옵션과 각각의 의미가 표에 나와 있습니다.

표 awk 명령 옵션 및 의미

옵션 

의미 

-F fs 

 입력 행으로 fs를 사용하여 구분 기호를 지정합니다 awk 명령의 기본 구분 기호는 공백 또는 탭입니다.

 -f 파일

 명령 행에 직접 명령을 입력하는 대신 스크립트 파일에서 awk 스크립트 명령을 읽으십시오.

-v var = val 

 프로세스를 실행하기 전에 변수 var를 설정하고 장치에 초기 값 val을 지정하십시오.

awk의 힘은 스크립트 명령으로, 다음과 같이 일치 규칙과 실행 명령의 두 부분으로 구성됩니다.

'일치 규칙 {execute command}'

여기서 일치하는 규칙은 sed 명령의 주소 부분과 기능이 동일하며 텍스트 내용의 특정 행에 스크립트 명령을 적용 할 수 있도록 지정하는 데 사용됩니다 ./demo/와 같은 문자열을 사용하여 데모 문자열이 포함 된 행을 볼 수 있습니다. 정규식이 지정되었습니다. 또한 전체 스크립트 명령은 작은 따옴표 ( '')로 묶고 실행 명령 부분은 중괄호 ({})로 묶어야합니다.

awk 프로그램이 실행될 때 실행 명령이 지정되지 않으면 기본적으로 일치하는 줄이 출력되고, 일치 규칙이 지정되지 않으면 텍스트의 모든 행이 기본적으로 일치합니다.

간단한 예를 들면 다음과 같습니다.

[root @ localhost ~] # awk '/ ^ $ / {print "Blank line"}'test.txt

이 명령 /^$/은 정규식으로, 텍스트의 빈 줄과 일치하는 기능이며, 동시에 명령이 print 명령으로 실행되는 것을 볼 수 있습니다.이 명령은 자주 사용됩니다. 매우 간단합니다. 즉, 지정된 텍스트입니다. 출력하십시오. 따라서 전체 명령의 기능은 test.txt에 N 개의 빈 줄이 있으면이 명령을 실행하면 N 개의 빈 줄이 출력됩니다.


Awk는 데이터 필드 변수를 사용합니다

awk의 주요 기능 중 하나는 텍스트 파일의 데이터를 처리하는 기능으로, 행의 각 데이터 요소에 변수를 자동으로 할당합니다. 

기본적으로 awk는 텍스트 행에서 찾은 데이터 필드에 다음 변수를 지정합니다.

  • $ 0은 전체 텍스트 줄을 나타냅니다.
  • $ 1은 텍스트 행의 첫 번째 데이터 필드를 나타냅니다.
  • $ 2는 텍스트 행의 두 번째 데이터 필드를 나타냅니다.
  • $ n은 텍스트 행의 n 번째 데이터 필드를 나타냅니다.

앞에서 언급했듯이 awk에서 기본 필드 구분 기호는 공백 문자 (예 : 공백 또는 탭)입니다. 텍스트 줄에서 각 데이터 필드는 필드 구분 기호로 나뉩니다. awk는 한 줄의 텍스트를 읽을 때 각 데이터 필드를 사전 정의 된 필드 구분 기호로 나눕니다. 

따라서 다음 예제에서 awk 프로그램은 텍스트 파일을 읽고 첫 번째 데이터 필드의 값만 표시합니다.

[root @ localhost ~] # cat data2.txt 

한 줄의 테스트 텍스트 

두 줄의 테스트 텍스트 

세 줄의 테스트 텍스트 

[root @ localhost ~] # awk '{print $ 1}'data2.txt 

하나 

둘 

프로그램은 $ 1 필드 변수를 사용하여 "각 텍스트 행의 첫 번째 데이터 필드 만 표시"를 나타냅니다. 물론 다른 필드 구분 기호를 사용하여 파일을 읽으려면 -F 옵션을 사용하여 수동으로 파일을 지정할 수 있습니다.


awk 스크립트 명령은 여러 명령을 사용합니다

Awk를 사용하면 여러 명령을 하나의 일반 프로그램으로 결합 할 수 있습니다. 명령 행의 프로그램 스크립트에서 여러 명령을 사용하려면 명령 사이에 세미콜론을 넣으십시오. 예를 들면 다음과 같습니다.

[root @ localhost ~] # echo "내 이름은 부자"| awk '{ $ 4 = "Christine"; print $ 0 }' 

내 이름은 Christine입니다

첫 번째 명령은 필드 변수 $ 4에 값을 할당합니다. 두 번째 명령은 전체 데이터 필드를 인쇄합니다. 보시다시피 awk 프로그램은 원본 텍스트의 네 번째 데이터 필드를 출력의 새 값으로 바꿨습니다. 

또한 한 번에 한 줄씩 프로그램 스크립트 명령을 입력 할 수도 있습니다.

[root @ localhost ~] # awk '{ 

> $ 4 = "Christine" 

> print $ 0}' 

내 이름은 Rich 

내 이름은 Christine

시작을 나타내는 작은 따옴표를 사용한 후, bash 쉘은>를 사용하여 더 많은 데이터를 요구하며 끝 작은 따옴표가 입력 될 때까지 한 번에 한 줄에 하나의 명령을 추가 할 수 있습니다.

이 경우, 파일 이름이 명령 행에 지정되어 있지 않기 때문에 awk 프로그램은 데이터를 얻기 위해 사용자 입력이 필요하므로이 프로그램을 실행할 때 사용자가 텍스트를 입력 할 때까지 기다린 다음 프로그램을 종료하려면 그냥 누르십시오. Ctrl + D를 누르면됩니다.


Awk는 파일에서 프로그램을 읽습니다.

sed와 마찬가지로 awk를 사용하면 스크립트 명령을 파일에 저장 한 다음 명령 줄에서 다음과 같이 참조 할 수 있습니다.

[root @ localhost ~] # cat awk.sh 

{print $ 1 "의 홈 디렉토리는"$ 6}입니다. 

[root @ localhost ~] # awk -F : -f awk.sh / etc / passwd 

루트의 홈 디렉토리는 / root 

bin입니다. 홈 디렉토리는 / bin 

데몬의 홈 디렉토리는 / sbin 

adm의 홈 디렉토리는 / var / adm입니다. 

lp의 홈 디렉토리는 / var / spool / lpd입니다 

Christine의 홈 디렉토리는 / home / Christine 

Samantha의 홈 디렉토리는 / home / Samantha 

Timothy의 홈입니다. 디렉토리는 / home / Timothy입니다

awk.sh 스크립트 파일은 print 명령을 사용하여 / etc / passwd 파일의 홈 디렉토리 데이터 필드 (필드 변수 $ 6) 및 사용자 ID 데이터 필드 (필드 변수 $ 1)를 인쇄합니다. 프로그램 파일에서 하나의 명령이 한 줄에 배치되고 명령 사이에 세미콜론이 필요하지 않으면 여러 명령을 지정할 수도 있습니다.


Awk BEGIN 키워드

awk에서 스크립트 명령의 런타임을 지정할 수도 있습니다. 기본적으로 awk는 입력에서 한 줄의 텍스트를 읽은 다음 해당 줄의 데이터에 대해 프로그램 스크립트를 실행하지만 때로는 데이터를 처리하기 전에 일부 스크립트 명령을 실행해야 할 수도 있습니다.이 경우 BEGIN 키워드가 필요합니다. 

BEGIN은 데이터를 읽기 전에 awk가 키워드 뒤에 지정된 스크립트 명령을 실행하도록합니다 (예 :

[root @ localhost ~] # cat data3.txt 

행 2 

행 3 행 

[root @ localhost ~] # awk 'BEGIN {print "data3 파일 내용 :"} 

> {print $ 0}'data3.txt 

data3 파일 내용 : 

호선 2 

호선 3 호선

보시다시피 여기서 스크립트 명령은 두 부분으로 나뉘며, BEGIN 부분의 스크립트 명령은 awk 명령이 데이터를 처리하기 전에 실행되며 스크립트 명령의 두 번째 부분은 실제로 데이터를 처리하는 데 사용됩니다.


어크 엔드 키워드

BEGIN 키워드에 해당하는 END 키워드를 사용하면 일부 스크립트 명령을 지정할 수 있으며 데이터를 읽은 후 awk가이를 실행합니다.

[root @ localhost ~] # awk 'BEGIN {print "data3 파일 내용 :"} 

> {print $ 0} 

> END {print "End of File"}'data3.txt 

data3 파일 내용 : 

행 2 

행 3 행 

파일 끝

보시다시피, awk 프로그램이 파일의 내용을 인쇄 할 때 END의 스크립트 명령이 실행됩니다.