Takip et

Bash: How to Count Number of Unique Lines in File (Çeviri)

# Bash ile Dosyada Benzersiz Satır Sayısını Sayma

Bir log dosyasında kaç farklı IP adresi olduğunu, bir veritabanı yedeğinde kaç farklı tablo adı bulunduğunu veya bir metin dosyasında kaç farklı kelime kullanıldığını bilmeniz gerekiyor mu? Bu gibi durumlarda, dosyadaki benzersiz satır sayısını belirlemek büyük önem taşır. Bu makale, Bash komut satırı aracı kullanarak dosyalardaki benzersiz satır sayısını saymanın çeşitli yöntemlerini, adım adım açıklamaları ve performans optimizasyonlarını ele alacaktır. Farklı seviyelerdeki kullanıcılar için ayrıntılı bir rehber sunarak, bu görevi nasıl en etkili şekilde gerçekleştireceğinizi öğreneceksiniz.

Öğrenme Yol Haritası:

* Yeni Başlayan: sort ve uniq komutlarını kullanarak basit bir çözüm.
* Orta Seviye: Gerçek dünya senaryoları, büyük dosyalar için optimizasyon teknikleri ve awk kullanımı.
* İleri Seviye: Performans analizi, edge case’ler ve daha karmaşık senaryolar için çözümler.

Bash’te Benzersiz Satır Sayısını Saymanın Temel Yöntemi: sort ve uniq

Dosyadaki benzersiz satırları saymanın en temel yöntemi, sort ve uniq komutlarını birleştirmektir. sort komutu, dosyadaki satırları alfabetik sıraya göre sıralar, böylece aynı satırlar yan yana gelir. uniq komutu ise ardışık tekrar eden satırlardan sadece birini bırakır. -c seçeneği ise her benzersiz satırın kaç kez tekrar ettiğini gösterir. Son olarak wc -l komutu ile benzersiz satır sayısını elde ederiz.

Adım Adım Uygulama:

1. Örnek dosya oluşturma: Öncelikle, örnek bir dosya oluşturalım:

echo "elma" > meyveler.txt
echo "armut" >> meyveler.txt
echo "elma" >> meyveler.txt
echo "muz" >> meyveler.txt
echo "armut" >> meyveler.txt

2. sort ve uniq komutlarını kullanma: Şimdi, sort ve uniq komutlarını kullanarak benzersiz satırları sayalım:

sort meyveler.txt | uniq -c | wc -l

Bu komut, önce meyveler.txt dosyasını sıralar, sonra ardışık tekrar eden satırlardan birini tutar ve sayısını gösterir. Son olarak, wc -l komutu benzersiz satır sayısını (bu örnekte 3) ekrana yazdırır.

Yeni Başlayanlar İçin Basit Kod Örneği:

Yukarıdaki komut, yeni başlayanlar için benzersiz satır sayısını saymanın en basit ve anlaşılır yoludur. Bu komutu, herhangi bir dosya yoluna uygulayarak benzersiz satır sayısını kolayca bulabilirsiniz.

Büyük Dosyalar İçin Performans Optimizasyonu: awk kullanımı

Yukarıdaki yöntem küçük dosyalar için yeterli olsa da, çok büyük dosyalar için performans sorunlarına yol açabilir. Büyük dosyalarda daha hızlı sonuçlar elde etmek için awk kullanabiliriz. awk programlama dili, metin dosyalarını işlemek için oldukça verimlidir.

Nasıl Yapılır? awk ile Benzersiz Satır Sayısı Bulma:

Aşağıdaki awk komutu, her satırı bir dizi içinde saklar ve daha önce görülmemiş satırları sayar:

awk '!a[$0]++{count++} END {print count}' meyveler.txt

Bu komut, a adlı bir dizi kullanır. Her satır ($0) diziye anahtar olarak eklenir. Eğer satır daha önce diziye eklenmemişse (!a[$0]++), count değişkeni artırılır. END bloğu ise, tüm satırlar işlendikten sonra count değişkeninin değerini (benzersiz satır sayısını) yazdırır. Bu yöntem, sort ve uniq kombinasyonundan genellikle daha hızlıdır, özellikle büyük dosyalar için.

Gerçek Dünya Örneği: Log Dosyası Analizi

Bir web sunucusunun log dosyasında kaç farklı IP adresinin bulunduğunu belirlemek istediğimizi düşünelim. Log dosyası şu formatta olsun:

192.168.1.1 - - [10/Oct/2023:13:55:36 +0300] "GET /index.html HTTP/1.1" 200 1234
10.0.0.2 - - [10/Oct/2023:13:56:00 +0300] "POST /login HTTP/1.1" 200 5678
192.168.1.1 - - [10/Oct/2023:13:56:15 +0300] "GET /about.html HTTP/1.1" 200 9012
172.16.0.1 - - [10/Oct/2023:13:57:00 +0300] "GET /contact.html HTTP/1.1" 200 3456
10.0.0.2 - - [10/Oct/2023:13:57:30 +0300] "GET /index.html HTTP/1.1" 200 1234

IP adreslerini ayıklamak için awk kullanabiliriz:

awk '{print $1}' access.log | sort | uniq -c | wc -l

Bu komut, access.log dosyasından ilk sütunu (IP adresi) ayıklar, sıralar, benzersizleri bulur ve sayısını gösterir.

İleri Düzey Teknikler: Performans Analizi ve Edge Case’ler

Çok büyük dosyalarda performans kritik hale gelir. time komutu ile farklı yöntemlerin performansını karşılaştırabilirsiniz:

time sort access.log | uniq -c | wc -l
time awk '!a[$0]++{count++} END {print count}' access.log

Sonuçları karşılaştırarak hangi yöntemin daha hızlı olduğunu belirleyebilirsiniz. Ayrıca, dosyanın satır sonu karakterleri (Unix vs. Windows) gibi farklılıkları da göz önünde bulundurmanız gerekebilir. sed komutu ile satır sonu karakterlerini dönüştürebilirsiniz.

Karmaşık Senaryolar: Boş Satırlar ve Çoklu Boşluklar

Dosyanızda boş satırlar veya çoklu boşluklar varsa, bunlar benzersiz satır sayısını etkileyebilir. Örneğin, sed komutu ile boş satırları ve çoklu boşlukları temizleyebilirsiniz:

sed '/^$/d;s/[[:space:]]\+/ /g' access.log | awk '!a[$0]++{count++} END {print count}'

Bu komut, önce boş satırları siler (/^$/d), sonra çoklu boşlukları tek boşlukla değiştirir (s/[[:space:]]\+/ /g) ve son olarak awk ile benzersiz satır sayısını hesaplar.

Sonuç

Bash komut satırı aracı, dosyalardaki benzersiz satır sayısını saymak için güçlü ve esnek araçlar sunar. sort ve uniq komutları basit bir çözüm sunarken, awk büyük dosyalar için daha verimli bir yaklaşım sağlar. Performans optimizasyonu ve edge case’ler göz önünde bulundurularak, ihtiyaçlarınıza en uygun yöntemi seçebilirsiniz. Daha detaylı bilgi ve ileri seviye Bash teknikleri için [Fatih Soysal’ın web sitesini](https://fatihsoysal.com) ziyaret edebilirsiniz.

Sıkça Sorulan Sorular:

1. Çok büyük dosyalar için hangi yöntem daha uygundur? Genellikle awk yöntemi, özellikle bellek kullanımı açısından, sort ve uniq kombinasyonundan daha verimlidir.

2. Dosyamda farklı satır sonu karakterleri varsa ne yapmalıyım? sed komutu ile satır sonu karakterlerini standardize edebilirsiniz.

3. Benzersiz satırların listesini nasıl alabilirim? sort | uniq komutunu kullanarak benzersiz satırların listesini alabilirsiniz.

4. Performansı nasıl daha da iyileştirebilirim? Paralel işlem tekniklerini kullanarak veya daha özel bir araç kullanarak performansı artırabilirsiniz.

5. Dosya çok büyükse ve belleğim yetersizse ne yapmalıyım? Dosyayı daha küçük parçalara bölerek işlemek ve sonuçları birleştirmek gerekebilir.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.