Автор темы
#1
awk ile değişiklikleri karşılaştırma
[/list]
Bu yaklaşım, değişiklikleri satır düzeyinde hızlıca görmek isteyenler için temel bir başlangıç sağlar. Daha karmaşık karşılaştırma gereksinimleriyle hangi durumlarda hangi awk deseni işe yarıyor, paylaşmak istersen buna göre bir dizi özelleştirme önerisi geliştirebilirim.
Günlük, log veya yapılandırma dosyalarında yapılan farkları hızlıca görmek için awk’ı nasıl kullanabileceğimizi tartışıyoruz. Özellikle dosyaların iki versiyonu arasındaki satır düzeyinde farkları, alan bazında karşılaştırmayı ve özet rapor oluşturmaya odaklanacağız.
- Amaç ve senaryo
- İki farklı konfigürasyon dosyasını veya iki sürüm arasındaki farkı tek bir çalışma akışında çıkarmak.
- Satır bazlı farkı hızlıca görmek yerine, belirli alanlar üzerinde karşılaştırma yapmak.
- Temel yaklaşım
- Temel farklar için diff veya git diff gibi araçlar yerine awk ile kendi karşılaştırma mantığını yazmak; bu, özellikle alanlı (field-based) karşılaştırmalar için daha esneklik sağlar.
- Örnek 1: Satır içerik karşılaştırması
- Dosya1 ve Dosya2’deki satır değişikliklerini belirtmek için satır numaralarını ve içeriği çıktılamak.
- Örnek 2: Belirli alanları karşılaştırma
- Virgülle ayrılmış CSV benzeri dosyalarda belirli sütunları izlemek; örneğin iki dosyada ikinci sütun değişmiş mi?
- Pratik ipuçları
- RS ve OFS ile sütunları ayarlama, alan bazlı eşleşme için kullanıcı tanımlı alan numaralarını kullanma.
- AWK’nin değişken ve koleksiyonları ile farkları bir rapora dönüştürme.
- Sınırlar ve dikkat Edilecek noktalar
- Dosya satır eşleşmesi doğrudan olmayabilir; sıralama değişiklikleri için ek adımlar gerekebilir.
- Çok büyük dosyalar için akış halinde işleme ve çıktı akışını yönetme.
КОД
1234567891011
[b]Örnek: İki dosya arasındaki farklı satırları ve satır içeriğini gösterir[/b]
[b]Dosya1 ve Dosya2 aynı satırı içeriyorsa karşılaştırır, fark varsa bildirir[/b]
awk '
FNR==NR { a[NR]=$0; next }
{
if (a[FNR] != $0) {
printf "Satır %d: Dosya1>%s | Dosya2>%s\n", FNR, a[FNR], $0
}
}
' dosya1 dosya2
КОД
1234
[b]Örnek 2: CSV benzeri dosyada ikinci sütun değişmiş mi?[/b]
[b]Dosya formatı: id,degisken,deger[/b]
awk -F, 'NR==FNR {d[$1]=$2; next} { if ($1 in d && $2 != d[$1]) printf "ID=%s: %s -> %s\n", $1, d[$1], $2 }' dosya1 dosya2
Ek açıklama
- Yukarıdaki örnekler temel bir karşılaştırma akışı sunar; ihtiyaca göre sütun seçimi ve çıktı biçimi sadeleşebilir veya zenginleşebilir. Dosya sıralaması değişiyorsa, birleştirme veya ön işleme adımları eklemek gerekir.
Kaynak ve benzer kullanım
[list]
AWK’nin kendi belgeleri ve popüler günlük analizi örnekleri, sütun bazlı karşılaştırmanın temel prensiplerini gösterir. İhtiyaç halinde düzenli ifadeler ve karmaşık koşullar ile karşılaştırma gücü artırılabilir.
[/list]
Bu yaklaşım, değişiklikleri satır düzeyinde hızlıca görmek isteyenler için temel bir başlangıç sağlar. Daha karmaşık karşılaştırma gereksinimleriyle hangi durumlarda hangi awk deseni işe yarıyor, paylaşmak istersen buna göre bir dizi özelleştirme önerisi geliştirebilirim.
