Awk Değişkenlerinin, Sayısal İfadelerin ve Atama Operatörlerinin Nasıl Kullanılacağını Öğrenin - Bölüm 8


Awk komut serisi heyecan verici hale geliyor İnanıyorum ki, önceki yedi bölümde, Linux'ta bazı temel metin veya dize filtrelemeyi gerçekleştirmek için uzmanlaşmanız gereken Awk'ın bazı temellerini inceledik.

Bu bölümden başlayarak, daha karmaşık metin veya dize filtreleme işlemlerini gerçekleştirmek için Awk'ın ileri düzey alanlarına dalacağız. Bu nedenle değişkenler, sayısal ifadeler ve atama operatörleri gibi Awk özelliklerini ele alacağız.

Bu kavramlar, kabuk, C, Python ve diğer pek çok programlama dilinden önce muhtemelen birçok programlama dilinde karşılaşmış olabileceğiniz kavramlardan kapsamlı bir şekilde farklı değildir, dolayısıyla bu konu hakkında fazla endişelenmenize gerek yok, sadece kullanımın ortak fikirlerini gözden geçiriyoruz. bahsedilen bu özellikler.

Bu muhtemelen anlaşılması en kolay Awk komut bölümlerinden biri olacaktır, o yüzden arkanıza yaslanın ve başlayalım.

1. Garip Değişkenler

Herhangi bir programlama dilinde değişken, bir değeri saklayan bir yer tutucudur; bir program dosyasında bir değişken oluşturduğunuzda, dosya yürütülürken bellekte değişken için belirttiğiniz değeri saklayacak bir miktar alan oluşturulur.

Awk değişkenlerini, kabuk değişkenlerini tanımladığınız şekilde aşağıdaki gibi tanımlayabilirsiniz:

variable_name=value 

Yukarıdaki sözdiziminde:

  1. değişken_adı: değişkene verdiğiniz addır
  2. değer: değişkende saklanan değer

Aşağıdaki bazı örneklere bakalım:

computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”

Yukarıdaki basit örneklere bir göz atın, ilk değişken tanımında bilgisayar_adı değişkenine linux-console.net değeri atanmıştır.

Ayrıca port_no değişkenine 22 değeri atanmıştır, ayrıca değeri atadığımız son örnekte olduğu gibi bir değişkenin değerini başka bir değişkene atamak da mümkündür. bilgisayar_adı değişken sunucusuna.

Hatırlarsanız, bu Awk serisinin 2. bölümünde, alan düzenlemeyi ele aldığımızda, Awk'un giriş satırlarını alanlara nasıl böldüğünden ve giriş satırlarını nasıl alanlara ayırdığını ve giriş satırlarını alan farklı alanları okumak için standart alan erişim operatörünü $ kullandığından bahsetmiştik. ayrıştırıldı. Alanların değerlerini saklamak için de değişkenleri aşağıdaki gibi kullanabiliriz.

first_name=$2
second_name=$3

Yukarıdaki örneklerde first_name değeri ikinci alana, second_name değeri ise üçüncü alana ayarlanmıştır.

Örnek olarak, bir uygulamanın kullanıcılarının adlarını, soyadlarını ve cinsiyetlerini belirten bir listesini içeren names.txt adlı bir dosyayı düşünün. Cat komutunu kullanarak dosyanın içeriğini aşağıdaki gibi görüntüleyebiliriz:

cat names.txt

Daha sonra, Awkfirst_name ve second_name değişkenlerini de kullanabiliriz. > aşağıdaki komut:

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

Bir başka duruma da bakalım, terminalinizde uname -a komutunu verdiğinizde tüm sistem bilgilerinizin çıktısını alıyor.

İkinci alan ana bilgisayar adınızı içerir, bu nedenle ana makine adını ana bilgisayar adı adlı bir değişkende saklayabilir ve Awk kullanarak yazdırabiliriz. aşağıdaki gibi:

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

2. Sayısal İfadeler

Awk'da sayısal ifadeler aşağıdaki sayısal operatörler kullanılarak oluşturulur:

  1. * : çarpma operatörü
  2. + : toplama operatörü
  3. / : bölme operatörü
  4. - : çıkarma operatörü
  5. % : modül operatörü
  6. ^ : üstel alma operatörü

Sayısal ifadelerin sözdizimi şöyledir:

operand1 operator operand2

Yukarıdaki formda, işlenen1 ve işlenen2 sayılar veya değişken adları olabilir ve operatör yukarıdaki operatörlerden herhangi biridir.

Aşağıda sayısal ifadelerin nasıl oluşturulacağını gösteren bazı örnekler verilmiştir:

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

Awk'da sayısal ifadelerin kullanımını anlamak için, Tecmint'e ait tüm alan adlarını içeren domains.txt dosyasıyla birlikte aşağıdaki örneği ele alacağız. güçlü>.

news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net

Dosyanın içeriğini görüntülemek için aşağıdaki komutu kullanın:

cat domains.txt

linux-console.net alan adının dosyada kaç kez göründüğünü saymak istiyorsak, bunu yapmak için aşağıdaki gibi basit bir komut dosyası yazabiliriz:

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { 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

Scripti oluşturduktan sonra kaydedip çalıştırılabilir hale getiriyoruz, out girişi olarak domains.txt dosyasıyla çalıştırdığımızda aşağıdaki çıktıyı alıyoruz:

./script.sh  ~/domains.txt

Betiğin çıktısında, domains.txt dosyasında, bunları manuel olarak sayabileceğinizi onaylamak için linux-console.net'u içeren 6 satır vardır.

3. Atama Operatörleri

Ele alacağımız son Awk özelliği atama operatörleridir; Awk'ta çeşitli atama operatörleri vardır ve bunlar aşağıdakileri içerir:

  1. *= : çarpma atama operatörü
  2. += : toplama atama operatörü
  3. /= : bölme atama operatörü
  4. -= : çıkarma atama operatörü
  5. %= : modül atama operatörü
  6. ^= : üstel alma atama operatörü

Awk'ta bir atama işleminin en basit sözdizimi aşağıdaki gibidir:

variable_name=variable_name operator operand

Örnekler:

counter=0
counter=counter+1

num=20
num=num-1

Awk'daki atama işlemlerini kısaltmak için yukarıdaki atama işleçlerini kullanabilirsiniz, önceki örnekleri inceleyin, atamayı aşağıdaki biçimde gerçekleştirebiliriz:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Bu nedenle yukarıda yazdığımız kabuk betiğindeki Awk komutunu += atama operatörünü kullanarak şu şekilde değiştirebiliriz:

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { 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 serisinin bu bölümünde değişkenler, sayısal ifadeler oluşturma ve atama operatörlerini kullanma gibi bazı güçlü Awk özelliklerini ele aldık ve ayrıca bunları gerçekte nasıl kullanabileceğimize dair birkaç çizimi ele aldık.

Bu kavramlar diğer programlama dillerindeki kavramlardan farklı değildir ancak Awk programlamada bazı önemli farklılıklar olabilir.

9. bölümde, özel kalıplar olan diğer Awk özelliklerine bakacağız: BEGIN ve END. O zamana kadar Tecmint'e bağlı kalın.