awk-Suche-Spalte aus einer Datei, wenn eine übereinstimmung Spalten aus beiden Dateien
Ich versuche zu vergleichen, Spalte 1, Datei1 und Spalte 3 aus Datei 2, wenn Sie übereinstimmen, und drucken Sie dann die erste Spalte von Datei1 und die ersten beiden Spalten von Datei2.
hier ist ein Beispiel aus jeder Datei:
Datei1
Cre01.g000100
Cre01.g000500
Cre01.g000650
Datei2
chromosome_1 71569 |655|Cre01.g000500|protein_coding|CODING|PAC:26902937|1|1)
chromosome_1 93952 |765|Cre01.g000650|protein_coding|CODING|PAC:26903448|11|1)
chromosome_1 99034 |1027|Cre01.g000100 |protein_coding|CODING|PAC:26903318|9|1)
gewünschte Ausgabe
Cre01.g000100 chromosome_1 99034
Cre01.g000500 chromosome_1 71569
Cre01.g000650 chromosome_1 93952
Ich habe auf der Suche in verschiedenen threads, die sind etwas ähnlich, aber ich kann nicht scheinen, um es zu drucken die Spalten aus den beiden Dateien. Hier sind einige links, die etwas im Zusammenhang:
awk vergleichen Sie die Spalten aus zwei Dateien, unterstellen Werten einer anderen Spalte
Erhalten Muster in einer Datei von einem anderen mit ack oder awk oder besser Weg als mit grep?
Awk - kombinieren der Daten aus 2 Dateien und drucken 3. Datei wenn die Schlüssel abgestimmt
Ich das Gefühl, ich sollte es herausfinden können basierend auf diesen threads, aber es waren zwei Tage, die ich habe versucht, verschiedene Variationen des codes und ich habe nicht bekommen, überall.
Hier ist etwas code, ich habe versucht, mit auf meine Dateien:
awk 'FNR==NR{a[$3]=$1;next;}{print $0 ($3 in a ? a[$3]:"NA")}' file1 file2
awk 'NR==FNR{ a[$1]; next} ($3 in a) {print $1 $2 a[$1]}' file1 file2
awk 'FNR==NR{a[$1]=$0; next}{print a[$1] $0}' file1 file2
Ich weiß, ich habe ein temp-matrix, enthält die erste Spalte von Datei1 (oder der 3. Säule von Datei2) dann vergleichen Sie es mit der anderen Datei. Wenn es eine übereinstimmung gibt, dann drucken Sie zuerst die Spalte aus Datei 1 und Spalte 1 und Spalte 2 aus Datei 2.
Danke für die Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie diese
awk
:Ihrer Mitte versuchen Sie die drei am nächsten ist, aber:
|
.a[$1]
.Ihre Probe-Ausgabe ist nicht mit der von Ihnen gewünschten Ausgabe (die Beispielausgabe zeigt Spalte 1 aus Datei 1 und Spalte 1 aus Datei 2; die gewünschte Ausgabe ist angeblich der Spalte 1 aus Datei 1 und die Spalten 1 und 2 aus Datei 2, wenn diese interpretation hängt von der interpretation der
$3
in Datei 2 wird der name zwischen zwei pipe-Symbole).Unter Berufung auf die Frage zum Zeitpunkt dieser Antwort wurde erstellt:
Können wir beobachten, dass, wenn
$3
in Datei 2 ist gleich einem Wert aus Datei 1, dann ist es so einfach zu drucken$3
als gespeicherte Wert.So, dies zu beheben bis:
Den Schlüssel ändern, ist die Zuordnung zu
a[$1]
(und die-F'|'
); der rest ist Kosmetik und kann gezwickt werden, um Ihren Anforderungen zu entsprechen (da ist die Frage selbst widersprüchlich, es ist schwer zu geben, eine bessere Antwort).