2017-12-17 3 views
2

Sagen wir, ich habe zwei Dateien enthält Attributnamen und Eigenschaften, in denen verschiedene Daten in zwei Dateien gespeichert:grep grep Ergebnisse

1.txt:

abc12  [email protected]  50 
edf13  [email protected]  50 
dde8  [email protected]  50 

2.txt

abc12  [email protected]  65 
edf13  [email protected]  50 
dde8  [email protected]  70 
dde7  [email protected]  70 

ich möchte grep wie folgt: erster grep "[email protected]" 1.txt | awk '{print $1}', dann grep * 2.txt wobei Stern (*) die Ausgabe des ersten Grep darstellt.

alles sollte in einer einzigen Zeile von der Aufforderung erfolgen.

erwartete Ausgabe:

abc12  [email protected]  65 
dde8  [email protected]  70 

Dank

+0

Was Ihre Frage ist und was haben Sie versucht, so weit ? – Pyves

+0

Schauen Sie sich bitte [editing-help] (http://stackoverflow.com/editing-help) an. – Cyrus

+0

'join <(grep 3 @ 1.txt | sort) <(grep 3 @ 2.txt | sort) -o 1.1,1.2,2.3 | Spalte -t' – Cyrus

Antwort

4

Mit einem awk Prozess:

awk 'FNR==NR{if ($2 ~ "[email protected]") a[$1]++; next} a[$1]' 1.txt 2.txt 

die erste condition{action} Einrichtung, wenn von der ersten Datei, erhöhen das Feldelement mit der ersten Lesung Feld als Hash. Die zweite Bedingung a[$1] ist wahr, wenn dieses Element eins oder mehr ist, dies wird für die zweite Datei überprüft und die Standardaktion ist das Drucken der Zeile.

0

Ein anderer Weg, mit beitreten und grep

join -t $'\t' -o 2.1 2.2 2.3 1.txt 2.txt | grep [email protected] 
0

Ich denke, die anderen Antworten sind besser, das ist, wenn Sie auf grep bestehen:

grep "[email protected]" 1.txt| awk '{print $1}' | while read i;do grep $i 2.txt;done