Basit bir yanıt benim için işe yaramadı çünkü comm
hattının hat için eşleştiğini fark etmedim, bu nedenle bir dosyadaki çift satırlar diğerinde olmadığı gibi yazdırılacak. Örneğin, eğer dosya1 içeriyordu:
Alex
Bill
Fred
Ve Dosya2 içeriyordu:
Alex
Bill
Bill
Bill
Fred
Sonra çıkış olur comm -13 file1 file2
: Benim durumumda
Bill
Bill
, bilmek istediğim tek her dize içinde dosya2, her dosyada bu satırın kaç defa gerçekleştiğine bakılmaksızın, dosya1'de mevcuttu.
Çözüm 1: unix.stackexchange dan (ilk "çalışma" cevabı buldum):
comm -13 <(sort -u file1) <(sort -u file2)
Çözüm 2:-u
(benzersiz) bayrağı sort
için kullandıkları
fgrep -v -f file1 file2
Dosya2 dupli içeriyorsa unutmayın Dosya1, fgrep
'da hiç bulunmayan satır çizgileri, yinelenen satırların her birini çıkarır.Ayrıca, tek bir (oldukça büyük) veri kümesi için tek bir dizüstü bilgisayardaki tamamen bilimsel olmayan testlerimin, Çözüm 1'den (comm
kullanarak) Çözüm 2'den (fgrep
kullanarak) neredeyse 5 kat daha hızlı olduğunu gösterdiğine dikkat edin.
Bunu, her iki dosya da sıralıysa çalışır. (Ben biliyorum o dosyaları sıraladı ama birçok kişi, ben dahil, soru başlığı okumak ve daha sonra cevapları atlamak) – user247866
@ user247866: Neyse ki onlar sıralanır eğer söylemek için naziksiniz :) – marlar