웹사이트 검색

Awk 내장 변수를 사용하는 방법 알아보기 - 10부


Awk 기능 섹션을 살펴보면서 시리즈의 이 부분에서는 Awk에 내장된 변수의 개념을 살펴보겠습니다. Awk에서 사용할 수 있는 변수에는 두 가지 유형이 있습니다. 8부에서 다룬 사용자 정의 변수와 내장 변수.

내장 변수에는 Awk에 이미 정의된 값이 있지만 해당 값을 신중하게 변경할 수도 있습니다. 내장 변수에는 다음이 포함됩니다.

  1. FILENAME : 현재 입력 파일 이름(변수 이름은 변경하지 마세요)
  2. FR : 현재 입력 라인의 번호 (즉, 입력 라인 1, 2, 3… 등, 변수 이름을 변경하지 마십시오)
  3. NF : 현재 입력 줄의 필드 수(변수 이름은 변경하지 마세요)
  4. OFS : 출력 필드 구분 기호
  5. FS : 입력 필드 구분 기호
  6. ORS : 출력 레코드 구분 기호
  7. RS : 입력 레코드 구분 기호

위의 Awk 내장 변수 중 일부의 사용을 설명하겠습니다.

현재 입력 파일의 파일 이름을 읽으려면 다음과 같이 FILENAME 내장 변수를 사용할 수 있습니다.

awk ' { print FILENAME } ' ~/domains.txt 

각 입력 줄에 대해 파일 이름이 인쇄된다는 것을 알게 될 것입니다. 이는 FILENAME 내장 변수를 사용할 때 Awk의 기본 동작입니다.

NR을 사용하여 입력 파일의 줄(레코드) 수를 계산하면 아래 예에서 볼 수 있듯이 빈 줄도 계산된다는 점을 기억하세요.

cat 명령을 사용하여 domains.txt 파일을 보면 텍스트가 있는 14줄과 빈 2줄이 포함되어 있습니다.

cat ~/domains.txt

awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt 

레코드나 라인의 필드 수를 계산하려면 다음과 같이 NR 내장 변수를 사용합니다.

cat ~/names.txt

awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt

다음으로 FS 내장 변수를 사용하여 입력 필드 구분자를 지정할 수도 있습니다. 이는 Awk가 입력 줄을 필드로 나누는 방법을 정의합니다.

FS의 기본값은 spacetab이지만 FS의 값을 다음과 같은 문자로 변경할 수 있습니다. Awk에 그에 따라 입력 라인을 나누도록 지시합니다.

이를 수행하는 방법에는 두 가지가 있습니다.

  1. 한 가지 방법은 FS 내장 변수를 사용하는 것입니다.
  2. 두 번째는 -F Awk 옵션을 호출하는 것입니다.

Linux 시스템의 /etc/passwd 파일을 생각해 보세요. 이 파일의 필드는 : 문자를 사용하여 구분되므로 다음 경우 새 입력 필드 구분 기호로 지정할 수 있습니다. 다음 예와 같이 특정 필드를 필터링하려고 합니다.

-F 옵션을 다음과 같이 사용할 수 있습니다:

awk -F':' '{ print $1, $4 ;}' /etc/passwd

선택적으로 아래와 같이 FS 내장 변수를 활용할 수도 있습니다.

awk ' BEGIN {  FS=“:” ; }  { print $1, $4  ; } ' /etc/passwd

출력 필드 구분 기호를 지정하려면 OFS 내장 변수를 사용하세요. 이는 아래 예에서와 같이 사용하는 문자를 사용하여 출력 필드를 구분하는 방법을 정의합니다.

awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd

이번 10부에서는 사전 정의된 값과 함께 제공되는 Awk 내장 변수를 사용하는 아이디어를 살펴보았습니다. 그러나 이러한 값을 변경할 수도 있지만, 적절한 이해를 바탕으로 현재 수행 중인 작업을 알지 않는 한 그렇게 하지 않는 것이 좋습니다.

그 후에는 Awk 명령 작업에서 쉘 변수를 사용하는 방법을 다루므로 Tecmint에 계속 연결되어 있습니다.