Auteur de la discussion #1
awk ile ayrıntılı çıktı alma

Bu konu, awk’nin temel kullanımlarından başlayıp, çıktı üzerinde nasıl daha ayrıntılı ve kontrollü biçimde çalışabileceğinizi adım adım ele alır. Özellikle log dosyaları, olay kayıtları veya metin tabanlı veri setlerinde satır bazlı ve alan bazlı işlemlerde nasıl esnek filtreleme, raporlama ve biçimlendirme yapabileceğinizi örneklerle gösterir.


Giriş ve temel kavramlar
[v]awk[/v] tek bir komutta hem filtreleme hem de metin işleme kapasitesine sahiptir. Standart kullanım biçimi şu şekilde: awk 'desen{işlem}' dosya. Desen kısmı satırları filtreler, işlem kısmı ise bu satırları dönüştürür. Bunu sütunlara bölünmüş veride kolayca kullanabilirsiniz. Örneğin bir CSV veya alanları boşlukla ayrılan bir dosyada, her satır için belirli sütunları hesaplayabilir, biçimlendirebilirsiniz.

Nitelikli çıktı için temel teknikler
  • Alanları tanımlama ve yeniden biçimlendirme: {print $1, $2, $3} gibi ifadelerle alanları çekip, gerektiğinde araya sabit metinler veya hesaplanmış değerler ekleyebilirsiniz. Örneğin:
    CODE
    1awk '{printf "%-20s %-10s %8.2f\n", $1, $2, $3}' dosya
    Bu yaklaşım, sütunları hizalı ve okunabilir kılar.
  • Koşullu çıktı:
    CODE
    1awk '$3 > 100 {print $1" "$3}' log.txt
    gibi ifadelerle belirli şartları sağlayan satırları hedefleyebilirsiniz. Büyük log dosyalarında hızlı özet için kritiktir.
  • Birden çok alanı birleştirme:
    CODE
    1awk '{name=$1" "$2; print name, $3}' dosya
    Bu, alan opsiyonlarıyla çalışırken okunabilirliği artırır.
  • Satır bazlı dönüştürme:
    CODE
    1awk '/error/ {print "HATA:", $0}' log.txt
    Belirli desenleri içeren satırları özel biçimde işlemek için uygundur.
  • Biçimlendirilmiş çıktılar:
    CODE
    1awk '{printf "%-10s | %s\n", $1, substr($0, index($0,$2))}' dosya
    Metin tabanlı raporlar için esnek biçimlendirme sağlar.
  • Tarih ve zaman işleme: Tarih biçimini çıkışta standartlaştırmak için awk’in tarih parçalarını hesaplayabilir, örneğin
    CODE
    1awk '{split($0,a," "); print a[1]"-"a[2]"-"a[3]}' dosya
    .
  • İmport/eksport ve alan adları: Dosya içindeki sütun adlarını almak veya değiştirmek için
    CODE
    1NR==1{print "Başlık:", $0}
    gibi satırlar kullanılır. Bu, dışa aktarılan veri için başlık satırı eklemeyi kolaylaştırır.
  • İç içe komutlar ve değişkenler: BEGIN ve END blokları ile toplamlar, ortalamalar veya dışa aktarma süreçlerini tek pass’ta gerçekleştirilebilir.
    CODE
    1awk 'BEGIN{sum=0; n=0} {sum+=$3; n++} END{print sum/n}' dosya
    ortalama hesaplar.
  • Dosya yönetimi ve çıktı yönlendirme: awk çıktısını doğrudan dosyaya yazdırabilirsiniz:
    CODE
    1awk '{print $0}' dosya > cikti.txt
    veya aynı anda hem ekrana hem dosyaya yazdırma için tee kullanımı:
    CODE
    1awk '{print $0}' dosya | tee cikti.txt


Pratik senaryolar
  • Sunucu loglarından hata satırlarını özetlemek:
    CODE
    1awk '/ERROR/ {print $1" "$2": "$0}' /var/log/sys.log | sort | uniq -c | sort -nr
  • CSV tabanlı satış kaydında toplam satış değerini hesaplamak:
    CODE
    1awk -F"," 'NR>1 {sum += $5} END{print "Toplam:", sum}' sales.csv
  • Belirli bir aralıktaki satırları seçmek:
    CODE
    1awk 'NR>=100 && NRthresh {print $0}' dosya
    Böylece dışarıdan threshold değeri girilir.
  • Dosya boyutu büyükse akıllı işleme: akış halinde işlemek için dosyayı satır satır okuyup hafızayı mümkün olduğunca düşük tutabilirsiniz.
  • Üstveriyle çalışmak: BEGIN bloğunda başlıkları eklemek veya END bloğunda özet raporu üretmek, çıktı bütünlüğünü artırır.


Sonuç ve kapanış
awk ile ayrıntılı çıktı almak, verinin yapısına göre özelleştirilebilen güçlü bir araçtır. Doğru desenler, alan ayrımları ve biçimlendirme seçenekleri ile raporlar hem okunabilir hem de analiz için hemen kullanılabilir hale gelir. Bu tekniklerle kendi dosyalarınız üzerinde ne tür ayrıntılar yakalayabildiğinizi paylaşmak isterseniz, hangi veri setlerinde hangi biçimlendirme yaklaşımlarını kullandığınızı öğrenmek isterim.

Vous devez être connecté pour répondre.

Utilisateurs qui consultent cette discussion (Total: 3, Membres: 3, Invités: 0)
Total: 3 (membres: 3, invités: 0)
0 citations sélectionnées