2016-07-02 14 views
0

ich einen Text file1 haben, die einige ids wie hat:Grep jede Zeile einer Textdatei in einem anderen Tab separierte Datei

c10013_g2_i1|m.63|vomeronasal type-1 receptor 4-like 
    c10015_g1_i1|m.409|vomeronasal type-1 receptor 1-like 

I verwendet grep '^[^|]*' file1 die Zeichenfolge vor | von file1 zu extrahieren.

Ich möchte jede dieser greped Zeichenfolge, um Zeilen aus einer anderen Datei2 übereinstimmen und die gesamte Zeile zurückgeben, wenn sie übereinstimmen. file2 sieht wie folgt aus:

c10013_g2_i1 781 622.2 73 5.95 5.16 
    c10014_g1_i1 213 58.67 3 2.59 2.25 
    c10014_g2_i1 341 182.35 4 1.11 0.96 
    c10015_g1_i1 404 245.23 16 3.31 2.87 
    c10017_g1_i1 263 105.37 6 2.89 2.5 

Schließlich wird das Ergebnis aussehen soll:

c10013_g2_i1|m.63|vomeronasal type-1 receptor 4-like 781 622.2 73 5.95 5.16 
c10015_g1_i1|m.409|vomeronasal type-1 receptor 1-like 404 245.23 16 3.31 2.87 

Antwort

-1

Klingt wie Sie versuchen, auf das erste Feld jeder Datei zu verbinden. Es gibt tatsächlich einen join Befehl, der dies tun kann. Sie müssen leicht (join Arbeiten auf Flächen) ändern file1:

cat file1 | sed 's/^\([^|]*\)[|]/\1 |/' | sort > file1-delimited 

Dann können Sie join sie:

cat file2 | sort | join file1-delimited - 

c10013_g2_i1 |m.63|vomeronasal type-1 receptor 4-like 781 622.2 73 5.95 5.16 
c10015_g1_i1 |m.409|vomeronasal type-1 receptor 1-like 404 245.23 16 3.31 2.87 

Dies sollte man 95% des Weges dorthin gelangen, aber das Format könnte nicht perfekt sein.

2

können Sie awk verwenden:

awk 'FNR == NR { 
    split($0, a, /[|]/) 
    seen[a[1]] = $0 
    next 
} 
$1 in seen { 
    $1 = seen[$1] 
    print 
}' file1 file2 

c10013_g2_i1|m.63|vomeronasal type-1 receptor 4-like 781 622.2 73 5.95 5.16 
c10015_g1_i1|m.409|vomeronasal type-1 receptor 1-like 404 245.23 16 3.31 2.87 
1

für strukturierten Text, awk ist der König von Werkzeugen.

$ awk 'NR==FNR{split($0,v,"|");a[v[1]]=$0; next} 
     $1 in a{k=$1; $1=""; print a[k] $0}' file1 file2 

c10013_g2_i1|m.63|vomeronasal type-1 receptor 4-like 781 622.2 73 5.95 5.16 
c10015_g1_i1|m.409|vomeronasal type-1 receptor 1-like 404 245.23 16 3.31 2.87