2017-02-06 1 views
0

Ich habe zwei Dateien, Datei 1:Vlookup in awk: Wie listet man am Ende der Ausgabe alles auf, was in Datei2 aber nicht in Datei1 vorkommt?

1 800  800  0.51 
2 801  801  0.01 
3 802  802  0.01 
4 803  803  0.23 

und Datei 2:

1 800  800  0.55 
2 801  801  0.09 
3 802  802  0.88 
4 804  804  0.24 

Ich habe ein awk-Skript, das für Werte in der zweiten Datei sucht, die die ersten drei Spalten der ersten übereinstimmen Datei.

$ awk 'NR==FNR{a[$1,$2,$3];next} {if (($1,$2,$3) in a) {print $4} else {print "not found"}}' f1 f2 
0.55 
0.09 
0.88 
not found 

Gibt es eine Möglichkeit, es so zu machen, dass alle Zeilen in der Datei auftreten 2, die nicht in der Datei befinden sich derzeit 1 sind noch am Ende der Ausgabe hinzugefügt, nach den Spielen, wie folgt aus:

0.55 
0.09 
0.88 
not found 
4 804  804  0.24 

diese Weise, wenn ich die beiden Dateien wieder zusammen fügen, werden sie wie folgt aussehen:

1 800 800 0.51 0.55 
2 801 801 0.01 0.09 
3 802 802 0.01 0.88 
4 803 803 0.23 not found 
4 804 804 not found 0.04 

Oder gibt es eine andere elegantere Lösung mit völlig unterschiedlichen Syntax?

Antwort

1
awk '{k=$1FS$2FS$3}NR==FNR{a[k]=$4;next} 
     k in a{print $4;next}{print "not found";print}' f1 f2 

Die oben Einzeiler geben Ihnen:

0.55 
0.09 
0.88 
not found 
4 804 804 0.24 
+0

Ich folge nicht wirklich den Code. Könnten Sie mir sagen, gibt es eine Möglichkeit, es die letzte Zeile als: 4 804 804 notfound 0,24 So wird die 0,24 in der 5. Spalte, wo der Rest der Daten aus Datei 2 sein wird Wenn diese Ausgabe mit Datei 1 eingefügt wird und nicht in Spalte 4 gefunden wird, wird angezeigt, dass diese Position in Datei 1 nicht vorhanden ist. Ich habe auch "nicht gefunden" in "nicht gefunden" geändert, da der vorherige Befehl dies als zwei Spalten ansieht. nicht 1. – DanS

+0

zu klären, wenn ich es wieder einfügen, ich will es wie der letzte Block von Code in meiner Frage aussehen. – DanS

+0

auch wenn es zwei Zeilen in Datei 2 gibt, die nicht in Datei 1 sind, druckt es "nicht gefunden" zwischen jeder Zeile ... AUCH werden sie in der gleichen Reihenfolge gedruckt, in der sie in Datei2 erscheinen, wenn ich drucken muss sie in der gleichen Reihenfolge wie Datei 1 ... (zB wenn die Reihenfolge in Datei 2 umgekehrt ist, wird es immer noch das gleiche Ergebnis drucken) irgendwelche Ideen? – DanS

Verwandte Themen