2016-08-04 6 views
0

Ich habe zwei Dateien, die wie folgt aussehen: Also, auf dieser BasisWie extrahiert man Zeilen aus Datei1 basierend auf übereinstimmenden Informationen ihrer/file1 (nur) ersten Spalte mit Datei2 in Linux?

file 1: 
HO840F3000336240 HOUSAM129901651 HOUSAF132871174 F 20060607 Yes 
HO840F3000336251 HOUSAM129800008 HOUSAF135774690 F 20060718 Yes 
HO840F3000336254 HOUSAM129901651 HOUSAF135357862 F 20060724 Yes 
HO840F3000487279 HOUSAM131520543 HOUSAF135761935 F 20061226 Yes 
HOUSAM55967108 HOUSAM53557280 HOUSAF53557285 M 20091129 Yes 
HOUSAF55969445 HOUSAM55967108 HOUSAF53579684 F 20120103 Yes 

file 2: 
HO840F3000336251 
HO840F3000487279 
HOUSAF135761935 
HOUSAM55967108 

Was würde ich tun, wie die Zeilen aus Datei 1, wo erste Spalte mit der ersten Spalte 2 in Datei ist üblich, zu extrahieren Beispiel sollte die Ausgabe sein:

file3: 

HO840F3000336251 HOUSAM129800008 HOUSAF135774690 F 20060718 Yes 
HO840F3000487279 HOUSAM131520543 HOUSAF135761935 F 20061226 Yes 
HOUSAM55967108 HOUSAM53557280 HOUSAF53557285 M 20091129 Yes 

ein Vorschlag?

+1

Wahrscheinlich eine Frage am besten geeignet für superuser.com oder serverfault.com, doch gehen wir: 'für Zeile in \' cat datei2 \ '; {grep $ line file1; }> file3' –

+0

Guter Vorschlag von Paulo, aber die ideale Seite für diese Art von Frage ist http://unix.stackexchange.com/ –

+0

this [Antwort] (http://Stackoverflow.com/a/38400436/4082052) funktioniert einwandfrei ... diese Frage sollte als doppelt markiert werden Ich fühle mich – Sundeep

Antwort

0

Die Antwort wird mit dem Befehl statt grep beizutreten.

nach beiden Sortieren von Dateien basierend auf ersten Spalte:

join File1 file2 > file3 
2

UPDATE:

Dieser Befehl wird mit der gewünschten Ausgabe erstellen file3. Geprüft und Arbeiten:

cat file1 | grep -f file2 > file3

Ausgang:

HO840F3000336251 HOUSAM129800008 HOUSAF135774690 F 20060718 Yes 
HO840F3000487279 HOUSAM131520543 HOUSAF135761935 F 20061226 Yes 

Es nutzt die -f Schalter in grep, die pro Zeile einen Dateinamen mit einem Muster nimmt. Wie pro man grep:

-f FILE, --file=FILE 
Obtain patterns from FILE, one per line. The empty file contains zero patterns, 
and therefore enter code here`matches nothing. (-f is specified by POSIX.) 
Verwandte Themen