uniq Komut Kılavuzu: Metin Dosyalarında Yinelenen Satırları Yönetmek

Linux'un uniq komutuyla ilgili temel ve ileri düzey kullanımlar, komut satırı örnekleri ve yaygın hatalara yönelik çözümler.

L
Linuxize
1 görüntülenme

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:

  1. Girdi olarak bir dosya veya standart girişi (stdin) alır.
  2. Varsayılan olarak, yalnızca bitişik yinelenen satırları tespit eder ve bunları tek bir satıra indirger.
  3. Çeşitli seçenekler (-c, -d, -u vb.) ile davranışı değiştirilebilir.
Önemli Not: uniq komutu, 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, genellikle sort komutu 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:

Kaynak

Linuxize