PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Best. Bezeichnung aus Header auslesen, und Datei danach benennen



Stormbringer
15-07-2003, 10:49
Hallo,
kann mir ggf. jemand helfen?
Ich erhalte täglich unterschiedliche Dateien (bspw. B1960001, L196000, M1960004, Y1960002, etc.) welche sich zeitlich nicht unterscheiden.
Allerdings gibt es einen Unterschied in einer laufenden Nummer in der Headerzeile (erste Zeile der Datei) - diese Nummer existiert an Position 24-28.
Nun muß ich eigentlich die Datei nach dieser laufenden Nummer der Headerzeile benennen.
Wie kann ich dies bewerkstelligen?

Danke & Gruß

pitu
15-07-2003, 11:08
Poste doch mal einen header

gruss,
pitu

Stormbringer
15-07-2003, 11:24
Hi,

dies ist die erste Zeile einer dieser Dateien:
0056120000212003071502416614$WDB10.PWHDA21.M196000 4 M
Die laufenden Nummer steht direkt vor dem $-Zeichen, lautet in diesem Fall also 6614.

BTW: die Datei muß nicht zwingend umbenannt werden, es würde auch mit einem kopieren funzen.

awk & sed sind bspw. auf dem System verfügbar ...

Gruß

pitu
15-07-2003, 13:08
Kann das gleiche Merkmal ($) in der Zeile nochmal auftauchen? Ist es also immer von Anfang der ersten Zeile bis zum $ ???

So ists ansonsten ziemlich einfach:



mv FILENAME `head -n 1 FILENAME | cut -d '$' -f1`


Falls du kein cut hast:



mv FILENAME `head -n1 rups | awk 'BEGIN{FS="\$"}{print $1}' 2>/dev/null`


gruss,
pitu

Stormbringer
15-07-2003, 14:30
Hallo pitu,

habe nun noch eine andere Lösungsmöglichkeit erhalten, da der Dateiname ja variabel ist:


#!/bin/sh
#
for i in `ls /tmp/test/*` ; do mv $i $(head -n 1 $i | cut -b 25-28) ; done

(Die Testdateien liegen in /tmp/test, das Skript in /tmp)
Nur werden die umgenannten Dateien aber in /tmp abgelegt.

Wie muß das Skript aussehen, damit ich auch das Zielverzeichnis variable angeben kann?

Danke & Gruß

pitu
15-07-2003, 14:44
for i in `ls /tmp/test/*` ; do mv /$1/$i $(head -n 1 $i | cut -b 25-28) ; done

das script rufst du dann mit "movefiles /neues/verzeichbiss" auf

gruss,
pitu