Best. Bezeichnung aus Header auslesen, und Datei danach benennen
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Hallo,
kann mir ggf. jemand helfen?
Ich habe 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ß
kann mir ggf. jemand helfen?
Ich habe 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ß
Last edited by Stormbringer on 15. Jul 2003 10:11, edited 2 times in total.
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Da hast Du:
for i in `ls` ; mv $i $(head -n 1 $i | cut -b 24-28) ; done
vorher mal nen Test mit
echo $(head -n 1 TestDateiName | cut -b 24-28)
machen.
Hats funktioniert?!
Cheers
Michael
for i in `ls` ; mv $i $(head -n 1 $i | cut -b 24-28) ; done
vorher mal nen Test mit
echo $(head -n 1 TestDateiName | cut -b 24-28)
machen.
Hats funktioniert?!
Cheers
Michael
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Hallo Michael,
leider kommt dies heraus:
./ren_test.sh: line 3: syntax error near unexpected token `mv'
Hast Du eine Idee?
Danke!!!
Gruß
leider kommt dies heraus:
./ren_test.sh: line 3: syntax error near unexpected token `mv'
Hast Du eine Idee?
Danke!!!
Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Ja, ick hab ne Idee. Da fehlte ein "do"
for i in `ls` ; do mv $i $(head -n 1 $i | cut -b 24-28) ; done
Cheers
Michael
for i in `ls` ; do mv $i $(head -n 1 $i | cut -b 24-28) ; done
Cheers
Michael
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
WUNDERBAR!!!!!
Nun eine letzte Frage zu dem Skript:
Ich habe eine Testdatei namen M1960004 in das Verzeichnis /tmp/test gelegt, und das von Dir präsentierte Skript in /tmp.
Den Beginn des Skripts habe ich nun abgeändert in:
for i in `ls /tmp/test/*` ; do mv /tmp/test $i $(head -n 1 $i | cut -b 25-28) ; done
Führe ich dieses nun aus, wird die umgenannte Datei in /tmp abgelegt, aber nicht in /tmp/test
Also habe ich mir, mit meinen absolut limitierten Skriptingfähigkeiten, gedacht, daß es dann wie folgt aussehen sollte:
for i in `ls /tmp/test/*` ; do 'mv /tmp/test $i $(head -n 1 $i | cut -b 25-28)' ; done
Funzt aber leider nicht ....
Wie muß ich es dann definieren, daß auch das Zielverzeichnis angegeben werden kann?
Muchas Gracias!!!!
Gruß
Nun eine letzte Frage zu dem Skript:
Ich habe eine Testdatei namen M1960004 in das Verzeichnis /tmp/test gelegt, und das von Dir präsentierte Skript in /tmp.
Den Beginn des Skripts habe ich nun abgeändert in:
for i in `ls /tmp/test/*` ; do mv /tmp/test $i $(head -n 1 $i | cut -b 25-28) ; done
Führe ich dieses nun aus, wird die umgenannte Datei in /tmp abgelegt, aber nicht in /tmp/test
Also habe ich mir, mit meinen absolut limitierten Skriptingfähigkeiten, gedacht, daß es dann wie folgt aussehen sollte:
for i in `ls /tmp/test/*` ; do 'mv /tmp/test $i $(head -n 1 $i | cut -b 25-28)' ; done
Funzt aber leider nicht ....
Wie muß ich es dann definieren, daß auch das Zielverzeichnis angegeben werden kann?
Muchas Gracias!!!!
Gruß
Last edited by Stormbringer on 15. Jul 2003 13:56, edited 1 time in total.
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Ups .... Schreibfehler!!!!
Die Zeile muß natürlich wie folgt lauten:
...
Den Beginn des Skripts habe ich nun abgeändert in:
for i in `ls /tmp/test/*` ; do mv $i $(head -n 1 $i | cut -b 25-28) ; done
...
Gruß
Die Zeile muß natürlich wie folgt lauten:
...
Den Beginn des Skripts habe ich nun abgeändert in:
for i in `ls /tmp/test/*` ; do mv $i $(head -n 1 $i | cut -b 25-28) ; done
...
Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Einfach den Pfad direkt vor das Ziel schreiben:
for i in `ls /tmp/test` ; do mv $i /tmp/test/$(head -n 1 $i | cut -b 24-28) ; done
Cheers
Michael
for i in `ls /tmp/test` ; do mv $i /tmp/test/$(head -n 1 $i | cut -b 24-28) ; done
Cheers
Michael
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Um das Quell==Zielverzeichnis beim Scriptaufruf mit angeben zu können lautet die Zeile:
for i in `ls $1` ; do mv $i $1/$(head -n 1 $i | cut -b 24-28) ; done
Aufruf:
. ./convertfilenames /tmp/test
Um das Quell<>Zielverzeichnis beim Scriptaufruf mit angeben zu können lautet die Zeile:
for i in `ls $1` ; do mv $i $2/$(head -n 1 $i | cut -b 24-28) ; done
Aufruf:
. ./convertfilenames /tmp/test /tmp/woanders
Hope that helps
Cheers
Michael
for i in `ls $1` ; do mv $i $1/$(head -n 1 $i | cut -b 24-28) ; done
Aufruf:
. ./convertfilenames /tmp/test
Um das Quell<>Zielverzeichnis beim Scriptaufruf mit angeben zu können lautet die Zeile:
for i in `ls $1` ; do mv $i $2/$(head -n 1 $i | cut -b 24-28) ; done
Aufruf:
. ./convertfilenames /tmp/test /tmp/woanders
Hope that helps
Cheers
Michael
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Danke!!!
Soweit funzt es. Nun werde die erste Version mal in mein Skript einbauen, und sehen, was passiert ... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Gruß
Soweit funzt es. Nun werde die erste Version mal in mein Skript einbauen, und sehen, was passiert ... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
So ein Mist .....
Auf dem Testsystem (SuSE 8.2) funzt es einwandfrei, aber auf dem Produktivsystem (SCO OpenServer 5.0.5) halt nicht. <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">
Zum Produktivsystem:
Ein echo $SHELL ergibt
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
# echo $SHELL
/bin/sh
</font><hr></pre></blockquote>
Nun das Skript:
<font face="Courier New">
#!/bin/sh
#
for i in `ls /q8/tmas/WEAT/von_weat` ; do mv $i /FTS/DATEN/21/$(head -n 1 $i | cut -b 25-28) ; done
</font><!--fixed-->
Der ausgeworfene Fehler lautet:
# ./ren_test.sh
./ren_test.sh: syntax error at line 3: `(' unexpected
Hat vielleicht jemand eine Idee, woran es liegt???
Danke vielmals!!!
Gruß
Auf dem Testsystem (SuSE 8.2) funzt es einwandfrei, aber auf dem Produktivsystem (SCO OpenServer 5.0.5) halt nicht. <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">
Zum Produktivsystem:
Ein echo $SHELL ergibt
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
# echo $SHELL
/bin/sh
</font><hr></pre></blockquote>
Nun das Skript:
<font face="Courier New">
#!/bin/sh
#
for i in `ls /q8/tmas/WEAT/von_weat` ; do mv $i /FTS/DATEN/21/$(head -n 1 $i | cut -b 25-28) ; done
</font><!--fixed-->
Der ausgeworfene Fehler lautet:
# ./ren_test.sh
./ren_test.sh: syntax error at line 3: `(' unexpected
Hat vielleicht jemand eine Idee, woran es liegt???
Danke vielmals!!!
Gruß
Last edited by Stormbringer on 16. Jul 2003 6:44, edited 1 time in total.
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Aber klar.
Die originale Bourne-Shell kennt die $()-Notation nicht, sondern nur die Backticks. Beide machen im Prinzip das gleiche, aber die $()-Notation erlaubt eine Schachtelung, die Backticks nicht. Bevor Du jetzt lange herumprogrammierst: Ersetze<pre>#!/bin/sh</pre>durch<pre>#!/bin/ksh</pre>Die Korn-Shell versteht $() (und kann auch sonst viel mehr als die sh). Alles andere sollte voll kompatibel sein.
Auf dem Linux-System kannst Du zu Testzwecken die pdksh installieren; alternativ ist die echte ksh auch frei zu kriegen, ich weiss momentan bloss nicht, wo.
Jochen
Die originale Bourne-Shell kennt die $()-Notation nicht, sondern nur die Backticks. Beide machen im Prinzip das gleiche, aber die $()-Notation erlaubt eine Schachtelung, die Backticks nicht. Bevor Du jetzt lange herumprogrammierst: Ersetze<pre>#!/bin/sh</pre>durch<pre>#!/bin/ksh</pre>Die Korn-Shell versteht $() (und kann auch sonst viel mehr als die sh). Alles andere sollte voll kompatibel sein.
Auf dem Linux-System kannst Du zu Testzwecken die pdksh installieren; alternativ ist die echte ksh auch frei zu kriegen, ich weiss momentan bloss nicht, wo.
Jochen
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Danke Jochen!!!
Habe das separate Skript nun entsprechend geändert, und es tritt keine Fehlermeldung mehr auf!!! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Hatte dir heute morgen bereits eine Email geschickt .... falls Dir zu den anderen Sachen etwas einfällt, wäre es super, wenn Du dazu auch noch etwas hättest ....
Gruß
Habe das separate Skript nun entsprechend geändert, und es tritt keine Fehlermeldung mehr auf!!! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Hatte dir heute morgen bereits eine Email geschickt .... falls Dir zu den anderen Sachen etwas einfällt, wäre es super, wenn Du dazu auch noch etwas hättest ....
Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Hi,
nun noch eine Frage rein aus Interesse, da die man page zu head nicht wirklich erquickend ist:
Sehe ich es richtig, daß die Option <i>head -n 1</i> die erste Zeile auswertet, und dann entsprechen <i>head -n 2</i> die zweite Zeile lesen würde?
Und wie würde dann bspw. das Auslesen des Dateinamens mit einer Separation aussehen?
(Irgendwie wurde mein Interesse geweckt ... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">)
Gruß
nun noch eine Frage rein aus Interesse, da die man page zu head nicht wirklich erquickend ist:
Sehe ich es richtig, daß die Option <i>head -n 1</i> die erste Zeile auswertet, und dann entsprechen <i>head -n 2</i> die zweite Zeile lesen würde?
Und wie würde dann bspw. das Auslesen des Dateinamens mit einer Separation aussehen?
(Irgendwie wurde mein Interesse geweckt ... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">)
Gruß
Last edited by Stormbringer on 16. Jul 2003 9:13, edited 1 time in total.
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
Nein, head ist das Gegenteil von tail und
die Zahl hinter n gibt die Gesamtanzahl der
Zeilen aus, die ausgewertet werden sollen,
die eine einzelne Zeilennummer.
man head
-n, --lines=NUMBER
print first NUMBER lines instead of first 10
Cheers
Michael
die Zahl hinter n gibt die Gesamtanzahl der
Zeilen aus, die ausgewertet werden sollen,
die eine einzelne Zeilennummer.
man head
-n, --lines=NUMBER
print first NUMBER lines instead of first 10
Cheers
Michael
Re: Best. Bezeichnung aus Header auslesen, und Datei danach benennen
>Und wie würde dann bspw. das Auslesen des Dateinamens mit einer Separation aussehen?
Häähhh?
Häähhh?