Ich habe 2 Textdateien. „A.txt“ enthältLeerzeichen mit awk entfernen, wenn der Wert von 1 TXT-Datei an einen anderen angehängt wird?
A 1 AB ... 1 5 -3 4.5 (contains 11 columns. So "4.5" is in the 11th column)
A 2 BC ... -2 3 8 9.2
A 3 WE ... 2 3 8 5.2
A 4 RT ... 23 2 24 4.1
...
END
„B.txt“ ähnlich ist, außer dass die letzten 2 Spalten von dem der „A.txt“ unterscheiden. Ein weiterer Unterschied ist, dass "B.txt" einige zusätzliche Zeilen enthält, die nicht in "A.txt" enthalten sind. Zum Beispiel ist die dritte Zeile A 3 QEW ... 5 23 34 5
in „B.txt“, aber nicht in „A.txt“
A 1 AB ... 1 5 4 9
A 2 BC ... -2 3 1 0
A 3 QEW ... 5 23 34 5
A 4 WE ... 2 3 -7 56
A 5 RT ... 23 2 -5 14
...
END
Was möchte ich tun, ist, den Wert der letzten Spalte in jeder Zeile von „A.txt extrahieren "und an die entsprechende Zeile in" B.txt "anhängen. Und für jede Zeile in "B.txt", die nicht in "A.txt" ist, möchte ich den Wert 1 anhängen, wenn das dritte Spaltenelement mit dem Buchstaben "Q" (zB QEW) beginnt und andernfalls der Wert 2 . So sollte die Ausgabe aussehen
A 1 AB ... 1 5 4 9 4.5
A 2 BC ... -2 3 1 0 9.2
A 3 QEW ... 5 23 34 5 1
A 4 WE ... 2 3 -7 56 5.2
A 5 RT ... 23 2 -5 14 4.1
...
END
Die awk
Befehle unten Werke:
NR==FNR{
arr[$3] = $11
next
}
{
if ($3 in arr){
print($0, arr[$3])
}else if ($3 == "^Q"){
print($0, "2")
}else{
print($0, "1")
}
}
Ran mit
awk -f script.awk f1 f2
Das einzige Problem ist, dass die Ausgabe ich erhalte, ist
A 1 AB ... 1 5 4 9
4.5
A 2 BC ... -2 3 1 0
9.2
A 3 QEW ... 5 23 34 5
1
A 4 WE ... 2 3 -7 56
5.2
A 5 RT ... 23 2 -5 14
4.1
...
END
, was falsch ist, weil die Werte in der letzten Spalte in neue Zeilen wie diese eingegeben werden sollten. Wie kann ich das beheben? Gibt es einen anderen Befehl, den ich anstelle dessen, was ich aufgelistet habe, verwenden kann?
Wenn ich das versuche, bekomme ich immer noch das Newline-Problem, das ich in der ursprünglichen Frage erwähnt – user5739619
Versucht Dos2unix? – karakfa