Awk 변수, 숫자 표현식 및 할당 연산자 사용 방법 알아보기-8 부


Awk 명령 시리즈는 점점 흥미로워지고 있습니다. 이전 7 개 파트에서 Linux에서 기본적인 텍스트 또는 문자열 필터링을 수행 할 수 있도록 마스터해야하는 Awk의 기본 사항을 살펴 보았습니다.

이 부분부터 시작하여 더 복잡한 텍스트 또는 문자열 필터링 작업을 처리하기 위해 Awk의 고급 영역을 살펴 보겠습니다. 따라서 우리는 변수, 숫자 표현식 및 할당 연산자와 같은 Awk 기능을 다룰 것입니다.

이러한 개념은 셸, C, Python 및 기타 여러 프로그래밍 언어 이전에 많은 프로그래밍 언어에서 접했을 수있는 개념과 포괄적으로 구분되지 않으므로이 주제에 대해 크게 걱정할 필요가 없습니다. 이러한 언급 된 기능.

이것은 아마도 이해하기 가장 쉬운 Awk 명령 섹션 중 하나 일 것입니다.

1. Awk 변수

모든 프로그래밍 언어에서 변수는 값을 저장하는 자리 표시 자입니다. 프로그램 파일에 변수를 만들 때 파일이 실행될 때 변수에 대해 지정한 값을 저장할 메모리에 일부 공간이 생성됩니다.

다음과 같이 쉘 변수를 정의하는 것과 동일한 방식으로 Awk 변수를 정의 할 수 있습니다.

variable_name=value 

위의 구문에서 :

  1. variable_name: is the name you give a variable
  2. value: the value stored in the variable

아래에서 몇 가지 예를 살펴 보겠습니다.

computer_name=”tecmint.com”
port_no=”22”
email=”[email protected]”
server=”computer_name”

위의 간단한 예를 살펴보면 첫 번째 변수 정의에서 tecmint.com 값이 computer_name 변수에 할당됩니다.

또한 22 값은 port_no 변수에 할당됩니다. 값을 할당 한 마지막 예에서와 같이 한 변수의 값을 다른 변수에 할당 할 수도 있습니다. 변수 서버에 대한 computer_name

기억할 수 있다면,이 Awk 시리즈의 2 부에서 필드 편집을 다뤘습니다. Awk가 입력 행을 필드로 나누고 표준 필드 액세스 연산자 인 $ 를 사용하여 다른 필드를 읽는 방법에 대해 이야기했습니다. "구문 분석되었습니다. "다음과 같이 변수를 사용하여 필드 값을 저장할 수도 있습니다.

first_name=$2
second_name=$3

위의 예에서 first_name 의 값은 두 번째 필드로 설정되고 second_name 은 세 번째 필드로 설정됩니다.

예를 들어 이름과 성, 성별을 나타내는 애플리케이션 사용자 목록이 포함 된 names.txt 라는 파일을 생각해보십시오. cat 명령을 사용하면 다음과 같이 파일의 내용을 볼 수 있습니다.

$ cat names.txt

그런 다음 아래 Awk 명령을 실행하여 first_name second_name 변수를 사용하여 목록에 첫 번째 사용자의 이름과 두 번째 이름을 저장할 수도 있습니다.

$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt

또 다른 경우를 살펴 보겠습니다. 터미널에서 uname -a 명령을 실행하면 모든 시스템 정보가 출력됩니다.

두 번째 필드에는 hostname 이 포함되어 있으므로 hostname 이라는 변수에 호스트 이름을 저장하고 다음과 같이 Awk를 사용하여 인쇄 할 수 있습니다.

$ uname -a
$ uname -a | awk '{hostname=$2 ; print hostname ; }' 

2. 숫자 식

Awk에서 숫자 표현식은 다음 숫자 연산자를 사용하여 작성됩니다.

  1. * : multiplication operator
  2. + : addition operator
  3. / : division operator
  4. - : subtraction operator
  5. % : modulus operator
  6. ^ : exponentiation operator

숫자 표현식의 구문은 다음과 같습니다.

$ operand1 operator operand2

위의 양식에서 operand1 operand2 는 숫자 또는 변수 이름이 될 수 있으며 operator 는 위의 연산자 중 하나입니다.

다음은 숫자 표현식을 작성하는 방법을 보여주는 몇 가지 예입니다.

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

Awk에서 숫자 표현식의 사용을 이해하기 위해 Tecmint가 소유 한 모든 도메인을 포함하는 domains.txt 파일이있는 다음 예제를 고려할 것입니다.

news.tecmint.com
tecmint.com
linuxsay.com
windows.tecmint.com
tecmint.com
news.tecmint.com
tecmint.com
linuxsay.com
tecmint.com
news.tecmint.com
tecmint.com
linuxsay.com
windows.tecmint.com
tecmint.com

파일 내용을 보려면 아래 명령을 사용하십시오.

$ cat domains.txt

도메인 tecmint.com 이 파일에 나타나는 횟수를 계산하려면 다음과 같이 간단한 스크립트를 작성할 수 있습니다.

#!/bin/bash
for file in [email protected]; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing tecmint.com 
                awk  '/^tecmint.com/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

스크립트를 생성 한 후 저장하고 실행 가능하게 만듭니다. domains.txt 파일을 출력 입력으로 사용하여 실행하면 다음과 같은 출력이 표시됩니다.

$ ./script.sh  ~/domains.txt

스크립트 출력에서 tecmint.com 이 포함 된 domains.txt 파일에는 수동으로 계산할 수 있는지 확인하는 6 줄이 있습니다.

3. 할당 연산자

우리가 다룰 마지막 Awk 기능은 할당 연산자입니다. Awk에는 여러 할당 연산자가 있으며 여기에는 다음이 포함됩니다.

  1. *= : multiplication assignment operator
  2. += : addition assignment operator
  3. /= : division assignment operator
  4. -= : subtraction assignment operator
  5. %= : modulus assignment operator
  6. ^= : exponentiation assignment operator

Awk에서 할당 작업의 가장 간단한 구문은 다음과 같습니다.

$ variable_name=variable_name operator operand

예 :

counter=0
counter=counter+1

num=20
num=num-1

위의 할당 연산자를 사용하여 Awk에서 할당 작업을 단축 할 수 있습니다. 이전 예제를 고려하면 다음 형식으로 할당을 수행 할 수 있습니다.

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

따라서 위에서 작성한 쉘 스크립트에서 + = 할당 연산자를 사용하여 다음과 같이 Awk 명령을 변경할 수 있습니다.

#!/bin/bash
for file in [email protected]; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing tecmint.com 
                awk  '/^tecmint.com/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Awk 시리즈의이 부분에서는 변수, 숫자 표현식 작성 및 할당 연산자 사용과 같은 몇 가지 강력한 Awk 기능과 실제로 사용하는 방법에 대한 몇 가지 그림을 다뤘습니다.

이러한 개념은 다른 프로그래밍 언어의 개념과 다르지 않지만 Awk 프로그래밍에는 몇 가지 중요한 차이점이있을 수 있습니다.

9 부에서는 특수 패턴 인 BEGIN END 인 더 많은 Awk 기능을 살펴볼 것입니다. "그때까지는 Tecmint와 연결 상태를 유지하십시오.