Awk Komutu
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...