Bir metin dosyasından yinelenen satırları kaldırmak, Bash betiğinde yaygın bir görevdir. Bu makale, iki verimli yöntemi ele almaktadır: sort
ve uniq
kullanımı ve awk
‘ın gücünden yararlanma.
İçindekiler
sort
ve uniq
Kullanımı
Bu yaklaşım, basit bir çözüm için iki temel Unix yardımcı programını birleştirir. sort
satırları alfabetik olarak sıralar, bu da ardışık yinelenenleri kaldıran uniq
için bir ön koşuldur. Her satırın *ilk* oluşumunun sırası korunur.
Komut şu şekildedir:
sort file.txt | uniq > file_unique.txt
Bu, file.txt
‘nin sıralanmış çıktısını uniq
‘e yönlendirir ve benzersiz satırları file_unique.txt
dosyasına kaydeder. Orijinal dosya dokunulmadan kalır.
Örnek:
Eğer file.txt
şunları içeriyorsa:
apple
banana
apple
orange
banana
grape
file_unique.txt
şunları içerecektir:
apple
banana
grape
orange
awk
Komutunu Kullanma
awk
, özellikle satırların orijinal sırasının korunmasının önemli olduğu durumlarda daha esnek ve güçlü bir çözüm sunar. Karşılaşılan satırları izlemek için ilişkisel bir dizi kullanır.
Komut oldukça özlüdür:
awk '!seen[$0]++' file.txt > file_unique.txt
Şimdi bunu inceleyelim:
$0
geçerli satırı temsil eder.seen[$0]
, satırı anahtar olarak kullanarakseen
dizisindeki bir öğeye erişir.++
değeri (başlangıçta 0) artırır.!
sonucu tersine çevirir; satır yalnızca ilk kez karşılaşıldığında (seen[$0]
0 olduğunda) yazdırılır.
Bu yöntem, satırların orijinal sırasını korur.
Örnek:
Aynı file.txt
dosyasını kullanarak, file_unique.txt
‘deki çıktı şu olacaktır:
apple
banana
orange
grape
Sonuç:
Her iki yöntem de yinelenen satırları etkili bir şekilde kaldırır. sort | uniq
, temel senaryolar için daha basittir, oysa awk
, özellikle orijinal sırayı korumak veya daha karmaşık yinelenen kaldırma ihtiyaçlarını ele almak için üstün esneklik ve kontrol sağlar.