programmierproblem ux script oder perl

Von: , Frage gestellt am Mo, 2. Dez 2002

hi leute

folgende Aufgabe bekomme ich nicht hin:

muster der eingabedatei

nov 1 kk ff ee
nov 1 mm bb
nov 2 ss ee rr
nov 2 cc vv
nov 3 aa ww
nov 3 irgendwas
nov 3 usw
.
.
.

daraus brauche ich für den jeweiligen Tag (1,2,3...)
ein file mit den Sätzen des jeweiligen Tages:

output file1
nov 1 kk ff ee
nov 1 mm bb

output file2
nov 2 ss ee rr
nov 2 cc vv

output file3
nov 3 aa ww
nov 3 irgendwas
nov 3 usw

Problem: ich habe auf meiner SUN Solaris nur script und perl

wer kann wie helfen?

mfg Arne

3 Antworten zu dieser Frage

  1. Antwort von nach 19 Stunden 0 hilfreich
    Re: programmierproblem ux script oder perl

    file="input.dat"
    rm -f *.out

    #
    #kurze variante wenn der sort -u und der awk funktioniert
    #
    for i in `cut -d" " -f1-2 $file | sort -u | awk '{print $1"."$2}'`
    do
    grep "^$i" $file >$i.out
    done

    #
    #lange variante wenn das mit dem akw bei dir nicht geht
    #
    tag=0
    # auch moglich ein sort -u "unique"
    for i in `cut -d" " -f1-2 $file | sort`
    do
    if [ "$tag" = "0" ]
    then
    tag=1
    datum1=$i
    else
    datum2=$i
    output=$datum1.$datum2.out
    # wenn sort -u funktioniert kann man sich dieses if sparen
    # und direkt den grep machen
    # man koennte sich diesen if auch so sparen, aber schaut a bisserl besser mit aus

    if [ ! -f $output ]
    then
    grep "^$datum1 $datum2" input.dat >$output
    fi
    tag=0
    fi

    done

    mfg

    christian

    • Antwort von nach 20 Stunden 0 hilfreich
      Re^2: programmierproblem ux script oder perl

      Hallo Christian,

      ich danke Dir erstmal - aber wie das so ist,
      über nacht habe ich auch eine Lösung gefunden..
      Funktioniert nur nicht! lach

      Problem: die Eingabedatei kann mehrere 100 MB gross sein!
      Vielleicht sogar GigaB Grössen erreichen.
      Damit bekommt meine Lösung einen Fehler:

      awk '{print >> $1"."$2 }' input.dataset (das ist alles)
      awk: too many output files 10
      record number 321265

      der output ist genau der den ich haben will, allerdings komme
      ich so ca. bis zum 10 November, fehlen also 20 Tagen...

      Aber vielleicht kann man den Fehler umgehen..
      ist nawk eine Lösung? (geht allerdings nicht mit der Syntax oben)

      Ansonsten werde ich auch Deine Lösung probieren, ich
      hatte bis jetzt vermieden, "viel" zu programmieren,
      weil viele Abfragen viel Zeit kosten..

      mfg Arne [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach einem Tag 0 hilfreich
        Re^3: programmierproblem ux script oder perl

        Hallo Arne,

        1.) gibt es einen Grund, das gleiche Problem in 3 Gruppen zu posten? (UNIX hätte es wahrscheinlich getan). Problem: die Eingabedatei kann mehrere 100 MB gross sein!
        2) Daher weht der Wind: große Datenmengen ! Damit bekommt meine Lösung einen Fehler:

        awk '{print >> $1"."$2 }' input.dataset (das ist alles)
        awk: too many output files 10
        record number 321265
        Was soll der arme awk denn machen, wenn ihm die Puste (bzw. der Speicher) ausgeht... Da kann er dann doch nur noch um Hilfe schreien. Ansonsten werde ich auch Deine Lösung probieren, ich
        hatte bis jetzt vermieden, "viel" zu programmieren,
        weil viele Abfragen viel Zeit kosten..
        Auch das ist nicht immer richtig... In diesem Fall (viele Daten) kann man nicht anders, als den Vorteil "die Lösung läuft auch mit Dateien im Bereich > 100 MB" durch den Nachteil "das Script muß sich ggf. mehrfach duch die Datenmenge wühlen" zu erkaufen.

        Außerdem ist es nicht ganz korrekt, bei einem 3-Zeiler von "Viel-Programmieren" zu sprechen. Die Lösungen von Christian sehen mir übrigens ganz ok (und auch sehr elegant **LOB**)aus.

        Gruß
        Bernhard

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!