2016-10-24 10 views
0

Wie finden Sie Schnittpunkt von 4 Dateien?finden Sie die Schnittmenge von 4 Dateien

Ich habe grep -Fx -f 1.txt 2.txt 3.txt 4.txt verwendet, aber es scheint, dass es nur für 2 Dateien funktioniert. Ebenso kann comm -12 1.txt 2.txt nicht auf 4 Dateien erweitert werden und erfordert Daten sortiert werden. Meine Daten sind nicht sortiert, in der Tat sollte es nicht sein. Ich bin auf Mac.

Input:

1.txt 
.css 
.haha 
.hehe 
2.txt 
.ajkad 
.shdja 
.hehe 

3.txt 
.css1 
.aaaaa 
.hehe 

4.txt 
.qwqw 
.kkkmsm 
.hehe 

Output: .hehe

I grep zuerst auf 1 und 2 in 12.txt gespeichert verwendet, als auf 3 und 4, gespeichert in 34.txt dann wieder verwendet grep on 12.txt und 34.txt. Aber es muss einen besseren Weg geben, dies zu tun.

+1

Was meinst du mit Kreuzung in diesem Fall? Können Sie ein kurzes Eingabebeispiel und die gewünschte Ausgabe bereitstellen? – dawg

+0

da gehst du ... – sanjihan

Antwort

1

können Sie die Kette die greps:

grep -f 1.txt 2.txt \ 
| grep -f- 3.txt \ 
| grep -f- 4.txt 

Die -f- bedeutet die Eingabe von dem Rohr kommende verwendet wird, nicht eine echte Datei.

+0

Funktioniert nicht. grep: -: keine solche Datei oder kein Verzeichnis – sanjihan

+0

@sanjihan: Was ist mit 'grep -f <(grep -f <(grep -f 1.txt 2.txt) 3.txt) 4.txt'? – choroba

+0

hmm .. liefert das falsche Ergebnis – sanjihan

1

Sie können die Kreuzung zwischen zwei finden:

$ grep -Fx -f f1.txt f2.txt 
.hehe 

dann verwenden, als Eingabe mit den beiden anderen:

$ grep -f <(grep -Fx -f f1.txt f2.txt) f3.txt f4.txt 
f3.txt:.hehe 
f4.txt:.hehe 

Oder, wenn Sie nur ein einziges Wort wollen:

$ grep -f <(grep -f <(grep -Fx -f f1.txt f2.txt) f3.txt) f4.txt 
.hehe 
+0

hm, leider gibt es das falsche Ergebnis zurück – sanjihan

Verwandte Themen