3 Ekim 2019 Perşembe

uniq komutu

Giriş
Not : Eğer amacımızı tekil değerleri bulup sıralamaksa, direkt sort komutu da kullanılabilir. Şöyle yaparız
$ printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort --unique

bar
foo
lol

Girdinin Sıralı Olmasını Bekler
Açıklaması şöyle
Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).
Örnek - sıralı olmayan veri
Elimizde şöyle bir kod olsun
printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | uniq --unique
Çıktı olarak şunu alırız. Tekil değerleri vermez, çünkü girdi sıralı değildir.
foo
bar
foo
lol
foo
Doğru çıktı için şöyle yaparız
printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort | uniq
Çıktı olarak şunu alırız
bar
foo
lol
Karşılaştırma Algortiması
Açıklaması şöyle. Yani bu komut aslında string karşılaştırması yapar.
Note that some uniq implementations like GNU uniq will give you the first of a sequence of lines that sort the same (where strcoll() returns 0) as opposed to are byte-to-byte identical (where memcmp() or strcmp() returns 0). To force a byte to byte comparison regardless of the uniq implementation, you can force the locale to C with:
Byte karşılaştırması için şöyle yaparız.
LC_ALL=C uniq your-file
Eğer hiçbir seçenek kullanmazsak tekil olmayan satır bulursa ilk bulduğunu çıktı olarak verir. Açıklaması şöyle
 With no options, matching lines are merged to the first occurrence.
-c seçeneği
count anlamına gelir. Satırın başına o satırın kaç kere bulunduğunu yazar. Elimizde şöyle bir dosya olsun
bird
bird
dog
rabbit
dog
cat
rabbit
dog
bird
cat
bird
bird
Şöyle yaparız.
uniq -c <(sort animal.txt) | awk '{print $2,$1}' 
Çıktı olarak şunu alırız.
bird 5
cat 2
dog 3
rabbit 2
-d seçeneği - Sadece birden fazla olan satırı çıktı verir
duplicate anlamına gelir. İki veya daha fazla olan satırları çıktı olarak verir. Şöyle yaparız.
sort input.txt | uniq -d
-u seçeneği - Sadece tekil olan satırı çıktı verir, duplicate olanları da eler
Bu seçenek zaten varsayılan davranış olduğu için aslında komuta eklemeye gerek yoktur. GNU uniq komutunda -u seçeneği yerine --unique olarak kullanılır.

Örnek
Elimizde şöyle bir dosya olsun
$ cat file
1
2
3
3
4
4
Eğer seçeneksiz kullanırsak çıktı olarak şunu alırız
$ uniq file
1
2
3
4
Eğer -u seçeneği ile kullanırsak çıktı olarak şunu alırız. Burada 3 ve 4 tekil olmadıkları için çıktıya dahil edilmezler.
$ uniq -u file
1
2


Hiç yorum yok:

Yorum Gönder