uniq Komutu Nedir ve Nasıl Çalışır?
uniq komutu, bir metin dosyasındaki yinelenen satırları tespit etmek ve filtrelemek için kullanılan güçlü bir Linux/Unix aracıdır. Temel olarak bitişik yinelenen satırları kaldırır, ancak bu davranışı çeşitli seçeneklerle özelleştirebilirsiniz. Komut, genellikle sort komutu ile birlikte kullanılır, çünkü uniq yalnızca ardışık yinelenenleri algılayabilir.
uniq komutunun çalışma prensibi şu şekildedir:
- Girdi olarak bir dosya veya standart girişi (stdin) alır.
- Varsayılan olarak, yalnızca bitişik yinelenen satırları tespit eder ve bunları tek bir satıra indirger.
- Çeşitli seçenekler (
-c,-d,-uvb.) ile davranışı değiştirilebilir.
Önemli Not:uniqkomutu, yinelenenleri tespit etmek için satırların tamamen aynı olması gerektiğini unutmayın. Farklı karakterler, boşluklar veya özel durumlar yinelenenleri ayırabilir. Bu nedenle, genelliklesortkomutu ile birlikte kullanılır.
Temel Kullanım Senaryoları
1. Yinelenen Satırları Kaldırmak
Aşağıdaki komut, bir dosyadaki bitişik yinelenen satırları kaldırır ve sonucu konsola yazdırır:
uniq dosya.txt
Örnek:
cat ornek.txt
Merhaba
Dünya
Merhaba
Linux
Dünya
Merhaba
uniq ornek.txt
Merhaba
Dünya
Merhaba
Linux
Dünya
Not: Yukarıdaki örnekte, ilk Merhaba satırı korunurken, ikinci Merhaba satırı yinelenen olarak algılanır. Ancak üçüncü Merhaba satırı, ikinci Merhaba satırından sonra geldiği için yinelenen olarak algılanmaz. Bu nedenle, sort komutu ile birlikte kullanmak gerekir.
2. Sonucu Bir Dosyaya Yazdırmak
Çıktıyı bir dosyaya kaydetmek için aşağıdaki komutu kullanın:
uniq girdi.txt cikti.txt
Bu komut, girdi.txt dosyasındaki yinelenen satırları kaldırır ve sonucu cikti.txt dosyasına yazar.
3. Standart Girişten Okuma
Bir dosyayı okumak yerine, komut satırından doğrudan girdi sağlamak için aşağıdaki yöntemi kullanabilirsiniz:
cat dosya.txt | uniq
Veya echo komutu ile doğrudan metin girebilirsiniz:
echo -e "Merhaba\nDünya\nMerhaba" | uniq
Merhaba
Dünya
4. NUL Karakteri ile Satır Ayracı Kullanmak
-z seçeneği, satır ayracı olarak NUL karakterini kullanır. Bu özellik, özellikle dosya adlarında boşluk veya özel karakterler bulunan durumlarda kullanışlıdır:
uniq -z dosya.txt
Sayma ve Filtreleme Seçenekleri
1. Satırların Kaç Kez Geçtiğini Saymak
-c seçeneği, her satırın kaç kez geçtiğini sayar ve sonucu satırın başına ekler:
uniq -c ornek.txt
2 Merhaba
2 Dünya
1 Linux
2. Yalnızca Yinelenen Satırları Görüntülemek
-d seçeneği, yalnızca yinelenen satırları görüntüler (her grup için bir satır):
uniq -d ornek.txt
Merhaba
Dünya
3. Tüm Yinelenen Satırları Görüntülemek
-D seçeneği, her yinelenen grubun tüm satırlarını görüntüler:
uniq -D ornek.txt
Merhaba
Merhaba
Dünya
Dünya
4. Yinelenmeyen Satırları Görüntülemek
-u seçeneği, yalnızca yinelenmeyen satırları görüntüler:
uniq -u ornek.txt
Linux
5. En Sık Geçen Satırları Belirlemek
Aşağıdaki komut, bir dosyadaki satırların frekansını hesaplar ve en sık geçenlerden başlayarak sıralar:
sort dosya.txt | uniq -c | sort -rn
Örnek çıktısı:
5 Merhaba
3 Dünya
1 Linux
Karşılaştırma Kontrolü Seçenekleri
1. Büyük/Küçük Harf Duyarlılığını Yoksaymak
-i seçeneği, satırları karşılaştırırken büyük/küçük harf farklılıklarını dikkate almaz:
uniq -i ornek.txt
Merhaba
Dünya
Linux
2. Belirli Bir Alanı Atlamak
-f seçeneği, karşılaştırma yapmadan önce belirli bir alanı atlar. Alanlar, boşluk karakterleriyle ayrılır:
uniq -f1 dosya.txt
Örnek dosya içeriği:
Merhaba Dünya
Merhaba Linux
Merhaba Dünya
Çıktı:
Merhaba Dünya
Merhaba Linux
Not: -f1 seçeneği, ilk alanı (ilk boşluktan önceki kısmı) atlar ve geriye kalan kısmı karşılaştırır.
3. Belirli Sayıda Karakteri Atlamak
-s seçeneği, karşılaştırma yapmadan önce belirli sayıda karakteri atlar:
uniq -s5 dosya.txt
Bu komut, her satırın ilk 5 karakterini atladıktan sonra karşılaştırma yapar.
4. Belirli Sayıda Karakterle Sınırlı Karşılaştırma
-w seçeneği, yalnızca belirli sayıda karakteri karşılaştırır:
uniq -w3 dosya.txt
Bu komut, her satırın yalnızca ilk 3 karakterini karşılaştırır.
5. Grupları Boş Satırlarla Ayırmak
--group seçeneği, tüm satırları görüntüler ve grupları boş satırlarla ayırır:
uniq --group dosya.txt
Yaygın Boru Hattı (Pipeline) Örnekleri
1. En Sık Geçen Log Satırlarını Bulmak
Bir log dosyasındaki en sık geçen satırları bulmak için aşağıdaki komutu kullanabilirsiniz:
sort access.log | uniq -c | sort -rn | head -n 10
Bu komut, access.log dosyasını sıralar, ardından yinelenen satırları kaldırır, frekanslarına göre sıralar ve en sık geçen 10 satırı görüntüler.
2. CSV Dosyasından Benzersiz Değerleri Çıkarmak
Bir CSV dosyasından belirli bir sütunun benzersiz değerlerini çıkarmak için:
cut -d, -f1 data.csv | sort | uniq
-d, seçeneği, ayraç olarak virgül kullanır ve -f1 seçeneği, ilk sütunu seçer.
3. IP Adreslerine Göre İstekleri Saymak
Bir log dosyasındaki IP adreslerine göre istekleri saymak için:
awk '{print $1}' access.log | sort | uniq -c
awk '{print $1}' komutu, her satırın ilk alanını (genellikle IP adresini) çıkarır.
4. Birden Fazla Kez Geçen E-Posta Adreslerini Bulmak
Bir e-posta listesinde birden fazla kez geçen adresleri bulmak için:
sort emails.txt | uniq -d
5. Yalnızca Bir Kez Geçen Kelimeleri Bulmak
Bir kelime listesinde yalnızca bir kez geçen kelimeleri bulmak için:
sort words.txt | uniq -u
Sık Karşılaşılan Sorunlar ve Çözümleri
1. Yinelenen Satırların Kaldırılmaması
Sorun: uniq komutu, yinelenen satırları kaldırmıyor.
Çözüm: Satırların bitişik olmasını sağlamak için dosyayı sort komutu ile sıralayın:
sort dosya.txt | uniq
Not: uniq komutu yalnızca ardışık yinelenenleri algılar. Bu nedenle, dosyayı sıralamak zorunludur.
2. Büyük/Küçük Harf Farklılıklarının Fark Edilmemesi
Sorun: Merhaba ve merhaba farklı olarak algılanıyor.
Çözüm: -i seçeneğini kullanarak büyük/küçük harf farklılıklarını yoksayın:
uniq -i dosya.txt
3. Sonlardaki Boşlukların Grupları Bölmesi
Sorun: Satır sonlarındaki boşluklar nedeniyle yinelenenler doğru şekilde algılanmıyor.
Çözüm: Boşlukları normalize edin:
sed 's/ *$//' dosya.txt | sort | uniq
4. Alanların Yanlış Atlanması
Sorun: -f seçeneği, beklenen şekilde çalışmıyor.
Çözüm: -f seçeneği, boşluklarla ayrılmış alanları atlar. Eğer CSV gibi belirli bir ayraç kullanıyorsanız, cut komutunu kullanın:
cut -d, -f1 dosya.csv | sort | uniq
5. Sayım Sütununun Sıralanmasının Zor Olması
Sorun: Sayım sonuçları rastgele sıralanıyor.
Çözüm: Sayım sonuçlarını frekansa göre sıralayın:
sort dosya.txt | uniq -c | sort -rn
İlgili Kılavuzlar ve Kaynaklar
uniq komutunun yanı sıra, metin işleme ve yinelenenleri yönetme konusunda yardımcı olabilecek diğer komutlara da göz atabilirsiniz:
- Linuxize: uniq Komutu Kılavuzu -
uniqkomutunun detaylı açıklaması ve örnekler. - Linuxize: sort Komutu Kılavuzu - Dosyaları sıralamak için kullanılan
sortkomutunun rehberi. - Linuxize: sort Kılavuzu -
sortkomutunun seçeneklerine hızlı bir bakış. - Linuxize: wc Komutu Kılavuzu - Dosyaların satır, kelime ve bayt sayısını hesaplamak için kullanılan
wckomutu. - Linuxize: cut Komutu Kılavuzu - Metin dosyalarından belirli alanları çıkarmak için kullanılan
cutkomutu. - Linuxize: awk Komutu Kılavuzu - Alan tabanlı metin işleme için kullanılan güçlü
awkkomutu.


