Programmierproblem ux script oder perl

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

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

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]

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!

  1. 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