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:
değişken_adı
: değişkene verdiğiniz addırdeğ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:
*
: çarpma operatörü+
: toplama operatörü/
: bölme operatörü-
: çıkarma operatörü%
: modül operatörü^
: ü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:
*=
: çarpma atama operatörü+=
: toplama atama operatörü/=
: bölme atama operatörü-=
: çıkarma atama operatörü%=
: modül atama operatörü^=
: ü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.