Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
ich habe ein kleines Problem. Ich habe 2 Dateien die ich zusammenführen muss. Ein Feld aus Datei2 muss in Datei1 an die passende Zeile angefügt werden. Leider habe ich keine andere Möglichkeit gefunden dies zu tun, ausser mit AWK und davon habe ich leider keine Ahnung
Aufbau von Datei1
Eindeutige 7-stellige Nummer am Anfang der Zeile. Die restlichen Felder sind durch ein "|" getrennt.
Bsp:
1234567|Feld2|Feld3|usw.
1120567|Feld2|Feld3|usw.
Aufbau von Datei2
Eindeutige 7-stellige Nummer am Anfang der Zeile. Die auch in Datei1 vorkommt. Datei2 hat nur noch ein zusätzliches Feld welche, wie oben genannt, in Datei1 in die Zeile mit der passenden Nummer angefügt werden soll.
Bsp:
1234567|Feld2|
Das Ergebnis sollte dann wie folg aussehen:
5634335|Feld2|Feld3|usw.
1234567|Feld2|Feld3|usw.|Feld2 aus Datei2|
1120567|Feld2|Feld3|usw.
Soweit ich weiss, arbeitet awk nur immer auf einer Datei. Vermutlich ist perl fuer Dich das bessere Werkzeug, v.a., wenn die Zeilenanzahl unterschiedlich ist. Wenn sie es nicht ist, koenntest Du die Dateien erstmal sortieren, dann mit paste in eine Datei schreiben:
wobei Du das X in '$X' mit der Spalte ersetzen musst, in der nun die Spalte 2 aus Datei 2 liegt. Geht nur, wenn jede Zeile aus Datei1 die gleiche Anzahl vonSpalten hat.
Leider ist es nicht so, dass beide Dateien die gleiche Anzahl an Zeilen haben.
In Datei1 stehen etwa 400000 Zeilen +/- 100000 und in Datei2 etwa 8000 Zeilen +/- 1000
Perl kann ich ja noch weniger ich bin doch SQL`ler und in diesen speziellen Fall muß ich es vermeiden mit tmp-tables zu arbeiten Aber mir war so als hätte ich gelesen, dass awk sowas kann.
Hmmm, eine kleine Sache ist mir noch aufgefallen
Lasse ich das Skript auf Linux laufen, funzt alles perfekt. Wenn ich
es aber auf AIX Unix laufen lasse, verliere ich in der neu erzeugten Datei
etwa 100 Zeilen. Weiß da einer was? Unterschiedliche Version o.ä.?
so, nun ist wieder ein kleines Problem aufgetaucht, bei dem ich gebrauchen könnte.
Folgender Code wurde mir freundlicherweise von rikola erstellt.
Code:
awk -F "|" '{ if (FILENAME=="Datei1") { array[$1] = $0 } else { array[$1] = array[$1] $2 "|" } } END { for (f in array) { print array[f] }}' Datei1 Datei2 > Datei3
Hier wird, wenn was gefunden wird, ein Feld in Datei1, aus Datei2, angefügt.
Wenn aber nichts gefunden wird, wird auch nichts angefügt, aber es müsste zumindest ein "|" angefügt werden, dass ich hier ein leeres Feld habe. Habe schon ein paar Sachen ausprobiert, aber mit meinen fast nicht vorhandenen AWK-Kenntnissen komme ich da nicht weiter.
Bsp. wie die Ausgabe dann aussehen sollte:
Feld1|Feld2||
Feld1|Feld2|FeldausDatei2|
Feld1|Feld2||
awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung: Hallo
Ich habe folgendes Problem:
Anhand dem Ergebnis einer Datenbankabfrage habe ich mir mit sed usw. einen String gebastelt und in einer Datei...