Konuyu Açan #1
Kullanıcılar arasında en çok savunulan konulardan biri, awk’nin gücünü işlevsel hatayla buluşturmak. Bu yazı, günlük senaryolarda karşılaşılan hata türlerini ve bunları hızlı şekilde ayıklama adımlarını derinlemesine ele alır. Konsol çıktılarından güvenilir geri bildirim almak için uygun stratejiler, akışçı (stream) kavramları ve sahne arkasında çalışan işlemci mekanizmaları üzerinde durulur.


Birinci bölüm: Temel prensipler ve hangi hataların sık karşınıza çıktığı
  • Giriş akışını anlamak: awk, her satırı bir dizi olarak işler; dizeyi alanlara bölmek için varsayılan olarak whitespace ayracı kullanır. Field sayısı değişebileceği için, empty alanlar veya beklenmeyen bazı satır yapıları hata kaynağı olabilir.
  • Sütun indekslerinin güvenliği: $1, $2, ... kullanırken, beklenen sütun sayısının her satırda mevcut olmadığını hesaba katın. Özellikle CSV ya da farklı ayraçlar kullanılıyorsa FS (field separator) doğru belirlenmelidir.
  • Koşullu akış ve çıktı mantığı: if, ternary operatörü ve blok yapılarıyla hangi satırların hangi işlemi göreceğini netleştirin. Yanlış karşılaştırmalar (string vs numeric) hataya açık kapılar açar.


İkinci bölüm: Hata ayıklamayı kolaylaştıran teknikler
  • Adım adım çalıştırma: Bir satır veya belirli satırlardaki çıktıyı görmek için FS ve OFS’nin değişkenlerini test edin. Örneğin, FS="," olarak ayarlanmış bir durumda alanları incelemek için print $0, $1, $NF kullanın.
  • Geçici günlükler: her satır için önemli alanları bir değişkende toplayıp çıktı almak yerine, hata veren satırların işaretlerini log dosyasına yönlendirmek pratik olur. Örnek: { if ($1 == "" || $NF == "") print "Eksik alan:", $0 >> "log.txt" }
  • Hatalı karşılaştırmaların önüne geçme: numeric karşılaştırma için $i+0 veya gensub ile gereksiz boşlukları temizlemek yararlı olabilir. Ayrıca $0 veya $1 üzerinde trim işlemi için gsub(/[ \t]+/, "", $1) gibi temizlemler uygulanabilir.
  • Dosya ve akışın izlenmesi: stdin yerine dosya üzerinden çalışıyorsanız FILENAME veya NR ile hangi satırda olduğunuzu izlemek, hatanın nereden geldiğini tahmin etmek için yararlı olur.


Üçüncü bölüm: Örneklerle pratik hata ayıklama
  • Örnek 1: CSV üzerinde sabit sütun sayısı kontrolü

KOD
1awk -F"," ' NF != 5 { print NR": satırda beklenen 5 sütun yok: "$0 }' dosya.csv

  • Örnek 2: Belirli bir sütundaki değere dayalı filtreleme ve hatalı satırları kaydetme

KOD
1awk -F"\t" '$3 ~ /^[0-9]+$/ { print $0 } !($3 ~ /^[0-9]+$/) { print "Geçersiz değer satırı:", NR }' dosya.txt

  • Örnek 3: Çok satırlı kayıtlar ve parantez içi kontrolü

KOD
1awk 'BEGIN{ RS="\n"; FS="\t" } { if ($1=="HEADER") { inrec=1 } else if (inrec && $2=="FOOTER") { inrec=0 } if (inrec) print $0 }' dosya.tsv


Sonuç ve kapanış
awk ile hata ayıklama, bir yandan satır tabanlı akışı korurken diğer yandan alan bazlı denetimi mümkün kılar. Doğru FS/RS ayarları, eksik sütun kontrolleri ve geçici günlüklerle hatayı izlemek, çoğu senaryoda sorunu hızlıca izole etmenizi sağlar. Bu konudaki deneyimlerinizi ve kullandığınız pratik eşleşmeleri paylaşabilirsiniz.

Yanıt vermek için giriş yapmış olmalısınız.

Bu konuyu görüntüleyen kullanıcılar (Toplam: 1, Üyeler: 1, Misafirler: 0)
Toplam: 1 (üyeler: 1, misafirler: 0)
0 alıntı seçildi