Bir sütundaki yinelemelere göre sıraları olmayan satırları kaldırma


30

Büyük 3 sütun dosyalarım (~ 10.000 satır) var ve o satırın üçüncü sütununun içeriği başka bir satırın üçüncü sütununda göründüğünde satırları kaldırmak istiyorum. Dosyaların boyutları biraz hantal hale getirir ve tüm satırlar aynı olmadığı için aşağıdaki kod gibi bir şey kullanamıyorum; 3. sütunun sadece içeriği.

awk '!seen[$0]++' filename

Yanıtlar:


31

Sadece awk komutunuzu, yinelenen satırları kaldırmak için gerçekleştirmek istediğiniz sütuna değiştirin (sizin durumunuz üçüncü durumda):

awk '!seen[$3]++' filename

Bu komut awkhangi satırların yazdırılacağını söylüyor . Değişken $3, sütun 3'ün tüm içeriğini tutar ve köşeli parantezler dizi erişimindedir. Bu nedenle, dosya adındaki her üçüncü satır sütunu için, dizinin düğümü seenartırılır ve söz konusu düğümün içeriği (sütun3 !) önceden ayarlanmamışsa , satır yazdırılır .

Üstteki awkkomut, giriş dosyasındaki sütunlarınız kendi aralarında spaceveya kendi Tabaralarında ayrılmışsa, sütunlar başka bir şeyle sınırlandırılmışsa, bu -Fseçeneğiyle birlikte kullanılmasını söylemeniz gerekir . Öyleyse, örneğin tüm sütunlar virgül ( ,) ile sınırlandırılmışsa ve üçüncü sütun kullanımındaki satır tabanını kaldırmak istiyorsa -F','.

awk -F',' '!seen[$3]++' filename

18

sortkomut zaten büyük dosyaları işlemek için optimize edilmiştir. Böylece, sortdosyanızdaki komutu çok iyi kullanabilirsiniz.

sort -u -t' ' -k3,3 file
  • -u - yalnızca benzersiz çizgileri yazdırın.
  • -t- sınırlayıcıyı belirtin. İşte bu örnekte, alanı sadece sınırlayıcı olarak kullanıyorum.
  • -k3,3 - 3. alanda sıralama.

GNU sıralamasının aslında büyük dosyaları sıralamak için daha iyi bir yaklaşım olduğunu düşündüren bu cevaba başvurabilirsiniz . Senin durumunda, bence bile olmasa bile -parallel, son sonucunu zaman gecikmesi olmadan başarabileceğini düşünüyorum .


Keskin bir şekilde yorum yapmak üzereydi -uTek , yinelenen anahtarları değil yalnızca yinelenen satırları kaldıracak ... ama hatalıyım.
Rastgele

@Ramesh işi yapar, ancak sıralama her zaman beklenmeyen tahmin ettiğim satırların sırasını değiştirir.
Bharat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.