2016-04-05 34 views
0

Bazı benzer verileri ve bazı benzersiz verileri içeren iki dosyam var. first.txt'da hangi verilerin görüntüleneceğini öğrenmek istiyorum, second.txt. Ters grep, eşleşmeyen tüm eşleşmeleri bul

İlk başta diff'i açık seçenek olarak kullanmayı düşündüm, ancak dosyaların dosyalarda göründüğü sıra önemlidir.

İşte demek istediğim. Veriler sıralıysa, beklediğim bilgiyi alırım. dosyalarda kadar içeride biraz verilerinin sırasını karıştırmak eğer

macbook:labs alex$ cat first.txt 
1 
2 
3 
4 
5 
macbook:labs alex$ cat second.txt 
1 
3 
5 
macbook:labs alex$ diff first.txt second.txt 
2d1 
< 2 
4d2 
< 4 

Ancak çıkış oldukça farklıdır

macbook:labs alex$ cat first.txt 
5 
2 
1 
4 
3 
macbook:labs alex$ cat second.txt 
3 
1 
5 
macbook:labs alex$ diff first.txt second.txt 
1,4d0 
< 5 
< 2 
< 1 
< 4 
5a2,3 
> 1 
> 5 

Ben de döngü

bir tür, bir grep kullanarak düşünce
#!/bin/bash 
a="first.txt" 
b="second.txt" 

for row in `cat $a` 
    do grep $row $b 
done 

Ancak bu yalnızca o ilk yılında da, ikinci içinde ne olduğunu bana söyleyecek.

Neyin özel olduğunu anlamak istiyorum, belki de bunu yeterince iyi anlamıyorum, ama - grep seçeneği de bana yardım etmiyor gibi görünüyor.

#!/bin/bash 
a="first.txt" 
b="second.txt" 
for row in `cat $b` 
do 
    grep -v $row $a 
done 

Birisi bu konuda herhangi bir ışık tutabilir mi?

sayesinde

cevap

0

Veri Sen grep -vf kullanabilirsiniz second.txt

görünmüyor o first.txt görünen öğrenmek istiyorum: Eğer varsa

grep -vFf second.txt first.txt 

2 
4 
1

Bu gibi ilk dosyaya özgü verileri bulmak için comm'u kullanabileceğiniz bir seçenek:

comm -23 file1 file2 

-23 şey dosyaları ilk sıralanması gerekmez olan iki dosyada da, yoksa sadece dosyada 2. olan satırları bastırır ama onlar değil eğer sort komutu aracılığıyla boru bunları yapabilirsiniz.