OverTheWire Bandit: Seviye 8 → Seviye 9
Bağlam
Linux’ta bir komutun çıktısını, başka bir komutun girdisi olarak kullanabiliriz. Buna Piping (Borulama) denir ve sembolü dik çizgi | işaretidir. Bu özellik, Unix felsefesinin kalbidir: “Tek bir şeyi yapan küçük programlar yaz ve onları birleştir.”
Bu seviyede data.txt dosyası var ve içinde binlerce satır şifre benzeri veri var. Ancak sadece bir satır benzersiz (unique), geri kalan hepsi tekrar ediyor.
Hedef
data.txt dosyasındaki sadece bir kez geçen satırı (şifreyi) bulmak.
Çözüm
Tekrarlayan satırları ayıklamak için uniq komutu kullanılır. Ancak uniq komutunun önemli bir kuralı vardır: Sadece arka arkaya gelen (bitişik) satırları karşılaştırır.
Yani dosyamız karışıksa (ki öyle), uniq düzgün çalışmaz. Bu yüzden önce dosyayı alfabetik olarak sıralamamız (sort), sonra uniq işlemine tabi tutmamız gerekir.
İşte Pipe (|) burada devreye girer:
sort data.txt: Dosyayı sırala.|: Sıralanmış çıktıyı al…uniq -u: …uniq komutuna ver. (-uparametresi “unique”, yani sadece bir kez geçenleri göster demektir).
Komutumuzu birleştirelim:
sort data.txt | uniq -u
Çıktı:
EN632PlfYiZbn3PhVK3XOGSlNInNE00t
Bingo! Binlerce tekrar eden satır elendi ve geriye sadece o eşsiz satır kaldı.
Öğrendiklerimiz
- Piping (
|): Komutları zincirleme bağlamamızı sağlar. Sol taraftaki komutun çıktısı, sağ taraftaki komutun girdisi olur. sort: Veriyi alfabetik veya sayısal sıralar.uniq: Tekrarlayan satırları filtreler. Genelliklesortile birlikte kullanılır.-uparametresi sadece benzersiz satırları getirirken,-c(count) parametresi her satırın kaç kez tekrar ettiğini sayar.