1. Home
  2. Docs
  3. Linux
  4. Terminal
  5. awk: Sütun Bazlı Veri Filtreleme ve Raporlama

awk: Sütun Bazlı Veri Filtreleme ve Raporlama

Print

Linux komut satırında yapılandırılmış metinleri, log dosyalarını veya CSV/tablo formatındaki çıktıları analiz etmek istediğimizde en yetenekli araç Linux awk komutu olur. Adını geliştiricileri Alfred Aho, Peter Weinberger ve Brian Kernighan’ın baş harflerinden alan awk, basit bir komuttan çok tam teşekküllü bir metin işleme ve raporlama programlama dilidir.

Bu rehberde, awk komutunun sütun mantığını, filtreleme kurallarını ve sistem yönetiminde hayat kurtaran pratik kullanım örneklerini ele alıyoruz.

awk Komutunun Temel Çalışma Mantığı

awk, girdi akışını satır satır okur ve her bir satırı varsayılan olarak boşluk veya sekme (tab) karakterlerine göre sütunlara (alanlara – fields) ayırır.

Temel sözdizimi:

awk 'koşul { eylem }' dosya_adi

Eğer herhangi bir koşul belirtilmezse, süslü parantez { } içindeki eylem tüm satırlara uygulanır.

Temel Alan (Sütun) Değişkenleri:

  • $0: Satırın tamamını temsil eder.
  • $1, $2, $3…: Sırasıyla 1., 2. ve 3. sütunları temsil eder.
  • $NF: Satırdaki en son sütunu temsil eder (Number of Fields).
  • NR: O an işlenen satır numarasını tutar (Number of Records).
  • NF: O anki satırda kaç adet sütun olduğunu belirtir.

Basit Sütun Yazdırma Örnekleri

Örneğin, ls -l çıktısından yalnızca dosya izinlerini ve dosya adını yazdırmak için 1. ve 9. sütunları seçebiliriz:

ls -l | awk '{print $1, $9}'

Dosyadaki her satırın kaç kelimeden oluştuğunu ve son kelimesini yazdırmak için:

awk '{print "Kelime Sayısı:", NF, "| Son Kelime:", $NF}' metin.txt

Özel Alan Ayırıcı Belirlemek (-F Parametresi)

Verileriniz boşlukla değil de iki nokta (:), virgül (,) veya noktalı virgül (;) ile ayrılmışsa, -F seçeneğiyle ayırıcıyı belirtebilirsiniz.

En klasik örnek /etc/passwd dosyasındaki kullanıcı adlarını (1. sütun) ve varsayılan kabuklarını (7. sütun) listelemektir:

awk -F: '{print $1, "->", $7}' /etc/passwd

CSV dosyaları üzerinde çalışırken:

awk -F, '{print $1, $3}' musteriler.csv

Koşullu Filtreleme ve Aritmetik İşlemler

awk, sütunlar üzerinde mantıksal ve sayısal karşılaştırmalar yapmanıza olanak tanır.

1. Sayısal Karşılaştırma

Örneğin, disk kullanım tablosunda (df -h) doluluk oranı %80’in üzerinde olan disk bölümlerini tespit etmek:

df -h | awk 'NR>1 && int($5) > 80 {print $1, "Kritik Doluluk:", $5}'

2. Metinsel Eşleşme (Regex Filtreleme)

Belirli bir sütunda bir deseni aramak için ~ (eşleşir) veya !~ (eşleşmez) kullanılır:

# Sadece bash kabuğu kullanan sistem kullanıcılarını listele
awk -F: '$7 ~ /bash/ {print $1, $7}' /etc/passwd

BEGIN ve END Blokları ile Raporlama

  • BEGIN { }: Herhangi bir satır okunmadan önce yalnızca bir kez çalışır. Genellikle başlık yazdırmak veya sayaçları başlatmak için kullanılır.
  • END { }: Dosyadaki tüm satırlar işlendikten sonra en sonda bir kez çalışır. Toplam, ortalama hesaplama veya kapanış özeti için idealdir.

Aşağıdaki örnek, bir log dosyasındaki toplam veri boyutunu toplar ve en sonda raporlar:

awk '
BEGIN { print "--- BOYUT RAPORU BASLADI ---"; toplam = 0 }
{ toplam += $5 }
END { print "Islem Goren Toplam Boyut (Byte):", toplam; print "--- RAPOR TAMAMLANDI ---" }
' transfer.log

Pratik Sistem Yönetimi Senaryoları

1. En Çok Bellek Tüketen Süreçleri Listelemek

ps çıktısından en çok bellek kullanan ilk 5 süreci formatlı yazdırmak:

ps aux --sort=-%mem | awk 'NR<=6 {printf "%-10s %-8s %-6s %s\n", $1, $2, $4, $11}'

2. Web Sunucusu (Nginx/Apache) Loglarında Hata Kodlarını Saymak

HTTP 500 veya 404 dönen istekleri ayıklamak:

awk '$9 == "404" {print $7}' access.log | sort | uniq -c | sort -nr | head -10

Diğer Terminal Komutları ile Birlikte Kullanım

awk, önceki bölümlerimizde incelediğimiz find komutu ve sed komutu ile harika bir üçlü oluşturur. find ile dosyaları keşfeder, grep veya sed ile metinleri ayıklar ve awk ile nihai raporunuzu şekillendirebilirsiniz.

Detaylı dahili fonksiyonlar ve gelişmiş script yazımı için resmi GNU Awk (Gawk) Kullanım Kılavuzu sayfasına göz atabilirsiniz.

Tags , , , , ,

How can we help?