Cemre Acar
Linux Awk Komutu Kullanımı

Linux Awk Komutu Kullanımı

Bu yazımda Linux Awk Komutuna ve Awk Komutunun temel kullanım özelliklerine değineceğim. Awk Nedir, Awk ile neler yapılabilir örnekler ile işleyeceğim. Daha önce Linux Grep Komutu Kullanımı ve Linux Sed Komutu Kullanımı üzerine yazılar yayınlamış ve Grep,Sed komutları ile temel işlemleri ve bu komutların bazı temel özelliklerinden bahsetmiştim. Grep komutunu anlattığım Linux Grep Komutu Kullanımı adlı yazıma buradan ve Linux Sed Komutu Kullanımı adlı yazıma da buradan ulaşabilirsiniz.

Awk Nedir ?

Awk , grep ve sed’e benzerdir. Awk’nın yanısıra NAWK ve GAWK adında iki gelişmiş versiyonu da bulunur. Adını geliştiricileri olan Aho ,Weinberger ,Kernighan’ın baş harflerinden alır.Genel olarak ;

Awk ‘…’ dosya şeklinde ifade edilir.

Awk ile Temel İşlemler

Hemen örnekler üzerinden detaylıca çeşitli kullanımlarını görebiliriz.

Örneğin:
Herhangi bir dizinimizde ls komutu ile listelemek istediğimiz dosyalarımızın belli kısımlarını seçebiliriz.

ls -l | awk '{print "Dosyanın Adı : "$9" Dosya İzinleri: "$1}'

Ya da elimizde bir isim dosyası olduğunu varsayalım. Benim isimlerim dosya.txt adlı bir text dosyasında ve hepsi alt alta.

awk '{print $1}' dosya.txt

Bu komutu kullanarak isimlerime erişebiliyorum.

Ayrıca -F argümanı ile şu şekilde bir kullanım da elde edebiliriz.

awk -F"\t+" '{print $2}' dosya.txt


Burada yukarıdaki örnekteki dosya ile aynı dosyayı kullandım isimlerin yanında <tab> ile boşluk bırakılmış. Bu boşluktan sonraki değeri alabilmek için yukarıdaki komutu verdim ve aşağıdaki sonuca ulaştım.

Komutlar içinde kullanabileceğimiz NF,NR ve length argümanlarına da değinmek gerekirse;
NF : Satırdaki boşlukla ayrılmış alan sayısını,
NR : Satırın sayısını,
length : Satırdaki karakter sayılarını verir.

Bu argümanları aşağıdaki şekilde kullanabiliriz.

awk ‘{print NF}’ dosya.txt 

awk ‘{print NR}’ dosya.txt 

awk ‘{print length}’ dosya.txt

Ek olarak komutlarda koşul da belirtmek isteyebiliriz , aşağıda alan sayıları(NF) iki olan tüm içeriği bastırmasını istedik. İlk görsel .txt dosyamızın içeriğini belirtiyor.

Cemre      809

Canan      305

Mustafa    997

Erol       120    EkAlan 

Huriye     800

Günnur     200    EkAlan 

Azra       650

Burcu      307

Halim      345    EkAlan
awk '{if (NF==2) {print}}' dosya.txt

Bu komut ile çıktımız aşağıdaki gibi oldu.

Yine başka bir örnekte dosyamızın içerisindeki verileri sorgulamamızı sağlayan bir yapı oluşturalım.

Örneğin:
Elimizde aşağıdaki gibi bir dosyamız olsun. Ben adını dosya.txt olarak belirliyorum.

1200

Cemre

İzmir


Bu dosyayı bir awk dosyası ile sorgulayalım. Yine ben myfile.awk adında bir dosya açıp içindekileri aşağıdaki şekilde belirledim.

/[0-9]+/ {print "Bu satır bir sayıdan oluşuyor."}

/[A-Za-z]+/ {print "Bu satır bir metinden oluşuyor."} 

/^$/ {print "Bu satır bir boş satırdır."}

Ardından gerekli komutumuzu yazalım.

awk -f myfile.awk dosya.txt 


Bu komutumuzu çalıştırdıktan sonra ekrana aşağıdaki şekilde .txt dosyamızın satırlarındaki veriler hakkında bilgi bastırmış olacağız. 

Ayrıca , Awk ile programlama için de aşağıdaki örneklerin üstünden gidebiliriz.

Örneğin:
Yeni boş bir .txt dosyası açalım ve içerisinde 4-5 satır boşluk yapalım. Ardından aşağıdaki komutu verdiğimizde bize boş satırlarımızı sayacaktır.

awk '/^$/ { print x++ }' yenidosya.txt

Farklı bir açıdan örnek olması adına awk ile not hesaplayabiliriz.
Aşağıdaki yapıya benzer bir not.txt dosyası oluşturalım.

Ahmet 56 67 83 90 75

Selim 75 88 92 100 60

Meriç 45 38 90 72 81

Ve ardından bir not_hesapla.awk dosyası oluşturup içeriğini aşağıdaki şekilde yapalım.

{

toplam = $2 + $3 + $4 + $5 + $6

averaj = toplam / 5

print $1 , averaj

}

Şimdi de son olarak komutumuzu verip , .txt dosyasındaki kişilerin ortalama not değerlerini ekrana bastıralım.

awk -f not_hesapla.awk not.txt

Awk , programlama dilleri yapısındaki if conditionals ve döngüleri de destekler.

Örneğin:
Yukarıdaki not hesaplama örneğimizi bir for döngüsü ile yapmayı deneyelim. Daha önce oluşturduğumuz not_hesapla.awk dosyasını aşağıdaki şekilde değiştirelim.

{

toplam=0

for (i=2; i<=NF; i++) {

        toplam += $i

        }

averaj = toplam / (NF-1)

print $1 , averaj

}

Ve ardından tekrar komutumuzu verip doğru çalışıp çalışmadığını kontrol edebiliriz

awk -f not_hesapla.awk not.txt

Son olarak küçük bir örnek olması amacı ile aşağıda awk ile büyük ve küçük değer bulmayı göstermeye çalıştım işinize yarayacağını düşünüyorum.



En Büyük ve En Küçük Değer Bulma:

awk 'BEGIN {max=-999; min=999} { {if ($1 >= max) {max = $1}  }  {if ($1 <= min)  {min = $1}  } } END {print max, min}' dosya.txt


Linux Awk Komutu Kullanımı adlı yazımı burada sonlandırıyorum. Bu yazıda Awk nedir, Linux Awk kullanımı ve Awk komutunun temel özelliklerini göstermeye çalıştım. Yazıda eksik ya da yetersiz gördüğünüz kısımları yorum olarak belirtebilirsiniz. İyi Çalışmalar.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.