gokayburuc.dev

Awk Komutu

bash-logo

AWK Komutu

Bu komut birden çok satır ve sütundan oluşan dosyalarda ve sistem çıktılarında filtreleme işlemleri gerçekleştirmek üzere geliştirilmiştir.

awk ile Görüntüleme

Bir .txt uzantılı dosya oluşturup içine aşağıdaki değerleri yapıştırıp kaydedip kapatalım.

Örnek TXT Dosyası :

ahmet manager account 45000
cemil clerk account 25000
necmi manager sales 50000
fethi manager account 47000
mithat peon sales 15000
tevfik clerk sales 23000
mahmut peon sales 13000
mecid director purchase 80000 

Şimdi bu metni awk ile görüntüleyelim.

awk '{print}' employee.txt

Bu komut dosyanın içerisinde her ne varsa olduğu şekliyle görüntüler:

ahmet manager account 45000
cemil clerk account 25000
necmi manager sales 50000
fethi manager account 47000
mithat peon sales 15000
tevfik clerk sales 23000
mahmut peon sales 13000
mecid director purchase 80000 

Awk ile Belirtilen Şablonla Eşleşen Değerleri görüntüleme

awk '/manager/ {print}' employee.txt 

Bu ifade ise satır içinde manager ifadesi bulunan satırları tablo olarak görüntüler.

ahmet manager account 45000
necmi manager sales 50000
fethi manager account 47000

Awk ile Sütunları filtreleme

awk '{print $1,$4}' employee.txt 

Yukarıda yazılan ifade 1 ve 4 sütunları filtreleyerek ekranda görüntülemeyi sağlar.

ahmet 45000
cemil 25000
necmi 50000
fethi 47000
mithat 15000
tevfik 23000
mahmut 13000
mecid 80000

Awk ile Satır Numaraları ile Birlikte Görüntüleme

awk '{print NR,$1,$4}' employee.txt 

Bu kod çalıştırıldığında ilk olarak satır numaraları sonra da filtrelenen sütunlar görüntülenir.

1 ahmet 45000
2 cemil 25000
3 necmi 50000
4 fethi 47000
5 mithat 15000
6 tevfik 23000
7 mahmut 13000
8 mecid 80000

awk ile son satırı görüntüleme

awk '{print $1,$NF}' employee.txt 

Bu kod çalıştırıldığında seçilen birinci ve dosyanın en sonuncu sütunları filtrelenir.

ahmet 45000
cemil 25000
necmi 50000
fethi 47000
mithat 15000
tevfik 23000
mahmut 13000
mecid 80000

Awk ile Belirli Satır aralıklarını görüntüleme

awk 'NR==3, NR==6 {print NR,$0}' employee.txt 

bu ifade belirtilen aralıktaki tüm değerleri görüntüler. $0 ifadesi sıfır numaralı sütunu ifade eder, bu da program tarafından tüm sütunları görüntüle olarak algılanır. NR parametresi ise satır numaralarını ifade eder. Üçüncü satırdan başlayarak altıncı satıra değin tüm değerler görüntülenir.

3 necmi manager sales 50000
4 fethi manager account 47000
5 mithat peon sales 15000
6 tevfik clerk sales 23000

awk ile düzensiz verilmiş verileri düzenli olarak görüntüleme

öncelikle city.txt isimli bir ifade oluşturup içine aşağıdaki değerleri yapıştıralım.

Edirne        22   Cemil 
Tekirdag                             59                             Fuat 
Kırklareli               39                          Selahattin 

Bu ifadede gördüğünüz üzere sütunların hizaları kaymış durumda ve biz buradan istediğimiz sütunu görüntülemek için aşağıdaki kodu kullanacağız:

awk '{print NR, "- ", $2}' city.txt 

Satır numaraları ve "- " ayracı ile 2 numaralı sütundaki değerleri görüntüle diyoruz.

Kodumuzun ekran görüntüsü aşağıdaki şekilde olacaktır.

1 - 22
2 - 59
3 - 39

Awk ile satır uzunluğu belirli miktarın üstünde olan ifadeleri görüntüleme

awk 'length($1) > 6' city.txt 

Bu kodu city.txt isimli daha önceden oluşturduğumuz kod için çalıştırdığımızda aşağıdaki sonucu elde ederiz.

Tekirdag                             59                             Fuat 
Kırklareli               39                          Selahattin 

Kodumuzu bir seviye daha geliştirelim :

awk 'length($1)>6 {print NR,$1}' city.txt 

Bu ifade ile 1.sütundaki değerlerinin uzunluğu altıdan uzun olan satırların, satır numaraları ve birinci sütunlarını görüntülüyoruz:

2 Tekirdag
3 Kırklareli

Awk ile If komutu kullanımı

If ifadeleri belirli bir olayın gerçekleşmesi şartına bağlı olarak çalıştırılan ifadelerdir. "Eğer ... olursa o zaman ... yap" tarzı koşul ifadeleridir. "Eğer yağmur yağarsa şemsiye aç" gibi basit bir örnekle özetlenebilirler. awk komutu da if ifadeleri ile birlikte kullanılabilirler.

awk '{ if($1 == "Edirne") print $0;}' city.txt

Yukarıdaki komut ile eğer birinci sütun değeri Edirne ifadesine eşit ise o zaman bu satırdaki tüm değerleri görüntüle diyoruz.

TAVSIYE: Kod yazmadan önce net olarak cümleyi psuedo code (yalancı kod, ya da benim tabirimle yalancı dolma 😃 ) olarak oluşturursanız yazmanız kolaylaşır. Yukarıdaki örnekte "eğer birinci sütun değeri Edirne ifadesine eşit ise o zaman bu satırdaki tüm değerleri görüntüle" ifadesi böyle bir ifadedir. Kodu yazmadan önceki planlama aşamasında yorum ifadesi olarak bu ifadeleri oluşturmanız kodlamada size muazzam kolaylıklar sağlar.

Yukarıdaki kodu çalıştırdığımızda aşağıdaki ekran çıktısını elde ederiz:

Edirne        22   Cemil 

awk ile for döngüsü oluşturma

awk 'BEGIN { for(i=1;i<=5;i++) print  i,"ifadesinin karesi",i*i,"sayısıdır."; }' 

Yukarıdaki ifade ile öncelikle bir for-i döngüsü oluşturuyoruz. Daha sonrasında ise bu ifadeye ait i değerlerini kendisi ile çarparak karelerini elde ediyoruz.

HATIRLATMA: For-i döngüleri belirtilen i sayısının başlangıç değerinden belirtilen şarta uyarken gerçekleştireceği işlemleri ifade ederler. for(i=1;i<=5;i++) ifadesi i=1 iken başar ve i<=5 olana kadar devam eder. i++ ile döngü boyunca başlangıc değeri 1 olan i sayısına değer eklenir (1,2,3...) şeklinde ifade 5 değerine eşitlenene kadar devam eder.

Kod çalıştığında aşağıdaki ekran elde edilir:

1 ifadesinin karesi 1 sayısıdır.
2 ifadesinin karesi 4 sayısıdır.
3 ifadesinin karesi 9 sayısıdır.
4 ifadesinin karesi 16 sayısıdır.
5 ifadesinin karesi 25 sayısıdır.

awk ile linux içerisinde kurulmuş paketlerin listelenmesi

sudo apt list --installed | awk -F '/' '/zsh/ {print $1}'

Yukarıda gerçek hayat uygulamalarından bir örnek verdim. Bu komutumuz ile sistemde kurulmuş apt lerin listesi çağrılıp ilk satırdaki ifade detayları / ile ayrılıyor. Ardından zsh ifadesini içeren satırların görüntülenmesi sağlanıyor.

Kodu kendi bilgisayarımda (Linux #123~20.04.1-Ubuntu) çalıştırdığımda aşağıdakine benzer bir ekran elde ediyorum :

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

zsh-antigen
zsh-autosuggestions
zsh-common
zsh-completions
zsh-syntax-highlighting
zsh-theme-powerlevel9k
zsh

Sonuç ve Değerlendirme

awk komutu ile ilgili diğer bash komutları için söylediğimiz ifadeyi tekrar edeceğiz : "Awk komutu da diğer komutlarla birlikte çalıştırılır ve böylece daha kompleks işlem kapasitesi sağlanmasına yardımcı olur."

Yeni yazılarımda görüşmek dileğiyle...