PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateinamenauslesen und sequenzieren, Shell, zsh



stephcar
23-03-2009, 18:32
Hi,

ich habe hier einen Haufen Messdaten in Dateien gespeichert, in denen die Zeit nach dem Schema YYYYMMDD_HH.nc im Dateinamen selbst angegeben ist und leider in der Datei selbst nicht. Das will ich aendern. ;)

Dazu muss ich die Zeit aus dem Dateinamen auslesen und in die kommandozeilenbasierende Software cdo weitergeben.

Der notwendige Befehl lautet z.B.

cdo settaxis,YYYY-MM-DD,HH:00,1hrour inputfile.nc outputfile.nc

Bsp. fuer eine Datei:
Die Datei B19990512_06.nc wird mit dem Befehl
cdo settaxis,1999-05-12,06:00,1hrour B19990512_06.nc B19990512_06_time.nc bearbeitet.

Und Jetzt brauche ich halt eine Schleife, die das gesamte Verzeichnis abarbeitet. Am liebsten wuerde ich das der zsh erledigen. :confused:

Besten Dank
Stephcar

stephcar
23-03-2009, 19:31
Ich habe mal folgendes probiert.


#!/bin/zsh
set verbose

for datei in * `ls B*`
do
YYYY =` echo $datei | cut -b2-5`
MM =` echo $datei | cut -b6-7`
DD =` echo $datei | cut -b8-9`
HH =` echo $datei | cut -b11-12`
cdo settaxis,$YYYY-$MM-$DD,$HH:00,1hour $datei ../time4/$datei
done


Aber laufen tut's nich; bei folgender Fehlermeldung:


zsh@rays3:../test2% ./filename2file.sh
./filename2file.sh:7: 1999 not found
zsh@rays3:../test2%

jan61
23-03-2009, 21:00
Moin,

lass mal die Leerzeichen in den Zuweisungen weg, das können die Shells nicht so gut ab:
YYYY=`echo ...`Und noch was: Statt der 4 cut-Befehle kannst Du einfacher einen einzigen sed benutzen, das spart Prozesse und damit Zeit:

jan@jack:~/tmp> echo B19990512_06.nc | sed -r 's/.(....)(..)(..)_(..)\..*/\1-\2-\3,\4:00,1hour/'
1999-05-12,06:00,1hour
Abhängig davon, wie die Dateinamen aufgebaut sind, musst Du ggf. die Regex ein wenig anpassen.

Jan

EDIT: In der Startzeile der Schleife ist noch was faul. Was soll der einzelne * da, der wird durch die Shell mit allen Dateien im aktuellen Verzeichnis ersetzt? Richtig wäre:
for datei in `ls B*`; do

stephcar
24-03-2009, 10:33
Ja besten Dank, das mit der empfindlichen Syntax muss ich mir merken.
Und das sed script ist auch cool.

Also besten Dank!