AWK - Script hilfe gesucht

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Sk8, 23.11.2006.

  1. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo,

    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 :hilfe2:

    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.

    Kann mir jemand weiterhelfen? ?(

    Mfg und Danke schonmal.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    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:
    Code:
    sort -n -k1 -t "|" Datei1 > sorted1
    sort -n -k1 -t "|" Datei2 > sorted2
    paste sorted1 sorted2 > merged
    awk -f "|" '{print $1 $2 usw $X}' merged
    
    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.
     
  4. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    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.
     
  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ja, Du hast recht. Folgendermassen koennte es gehen:
    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
    
    Das ganze solltest Du vermutlich in eine dritte Datei umleiten, damit nicht 400000 Zeilen an Dir vorbeiflimmern.
     
  6. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Super hat funktioniert, klick mich
    mal schauen wie weit su kommst :D
     
  7. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hmmm, eine kleine Sache ist mir noch aufgefallen :oldman
    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.ä.?
     
  8. #7 Schlaubi_fi.de, 29.11.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Hast Du denn die Versionen der aufgerufenen Kommandos schonmal verglichen (Linux und AIX)?
     
  9. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Auf Linux ist es die Version 3.1.3 und auf der Unix war
    es mir nicht möglich die Version zu bestimmen, aber
    die Datei awk ist von 2001.

    MfG
     
  10. #9 Schlaubi_fi.de, 30.11.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Hast Du die Möglichkeit einen aktuellen GNU-awk zu installieren?
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hat sich erledigt 8) Fehler gefunden
     
  13. Sk8

    Sk8 Grünschnabel

    Dabei seit:
    23.11.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hi,

    so, nun ist wieder ein kleines Problem aufgetaucht, bei dem ich :hilfe2: 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||

    Danke schonmal

    MfG
     
Thema: AWK - Script hilfe gesucht
Besucher kamen mit folgenden Suchen
  1. awk zwei dateien zusammenfügen

Die Seite wird geladen...

AWK - Script hilfe gesucht - Ähnliche Themen

  1. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  2. Hilfe bei Screen innerhalb von scripten

    Hilfe bei Screen innerhalb von scripten: Hallo zusammen, ich stehe vor einem wahrscheinlich unglaublich winzigen dämlichen Problem, nichtsdestotrotz verzweifle ich daran derzeit. Ich...
  3. Hilfe bei backup-script

    Hilfe bei backup-script: Hilfe bei backup-script Hallo zusammen. Für das Studium sollen wir 2 "kleine" shell-Scripte zur Datensicherung schreiben. script 1....
  4. Hilfe bei Scriptanpassung für VMWare 5.1 HA und USV Shutdown

    Hilfe bei Scriptanpassung für VMWare 5.1 HA und USV Shutdown: Hallo, ich hoffe, dass mir hier jemand helfen kann. Ist an sich ein kleine Sache und für einen Shell-Profi wahrscheinlich nicht mehr als eine...
  5. Hilfe bei Shell-Scripting

    Hilfe bei Shell-Scripting: Moinsen! Ich soll für ein Labor im Studium folgende Skripte schreiben und bräuchte da etwas Unterstützung! 1. frename.sh <string> Hängt...