2010-04-23 17 views
5

Bazılarını aradım ama özellikle neyin peşinde olduğumu bulamadım.Kabuk Komut Dosyası - metin satırlarını karşılaştırarak, eşlemeleri silme

İki dosyam var: "a.txt", "b.txt".

Her biri yeni satırlarla ayrılmış e-posta adreslerinin bir listesini içerir.

"a.txt" deki tüm satırlar için, "b.txt" içinde herhangi bir yerde bir eşleşme olup olmadığını kontrol etmem gerekiyor. Öyleyse, "a.txt" içindeki e-posta adresinin kaldırılması gerekiyor.

Mac OS X kullanıyorum, bu yüzden yardımcı olabilecek bir kabuk komut dosyası arıyorum

(Alternatif olarak, yeni bir dosya "c.txt" çıkışı bu daha kolaydır eğer. Oluşturulmuş olabilir), veya betiği oluşturmak için nasıl gideceğimi gösteren işaretçiler. Herhangi bir yardım için teşekkürler.

cevap

3
grep -F -x -f b.txt -v a.txt > c.txt 

veya buna eşdeğer

fgrep -x -f b.txt -v a.txt 
böyle
+0

Bu konuda yardımcı olan herkese çok teşekkür ederim. Bu ipucunu kullandım, ama herkesin yardımını çok takdir ediyorum. OP'nin aradığı – SirRatty

2

Kullanım comm komut:

cat a.txt | sort > a2.txt 
cat b.txt | sort > b2.txt 
comm -23 a2.txt b2.txt > c.txt 
0
awk 'FNR==NR{_[$1];next}(!($1 in _))' b.txt a.txt > c.txt 
0

Ben grep/fgrep cevabı gibi ama burada başka bir kedi/sıralama seçenektir :

cat a.txt b.txt | sort -u > c.txt 
+0

bu değil. – ghostdog74

+0

oops. Haklısın; Gönderiyi tamamen yanlış okudum. Üzgünüm SirRatty! –