dateiname auseinandernehmen.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

dateiname auseinandernehmen.

Beitrag von arteist » 03.10.2002 20:00:38

hi,
ich haeb folgendes problem:
in einem verzeichniss liegen mehrer dateien im format u_xxx.txt und dazugehörig immer eine xxx.txt und h_xxx.txt
nun würde ich gerne ein
"ed xxx.txt <u_xxx.txt
cat h_xxx.txt"
mit allen diesen dateien ausführen!
wie kann ich diese aufgabe lösen?
hab leider noch nicht so viel erfahrung mit programmen auf der shell/shellskripten ;)

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Re: dateiname auseinandernehmen.

Beitrag von ernohl » 03.10.2002 20:24:46

arteist hat geschrieben:nun würde ich gerne ein
"ed xxx.txt <u_xxx.txt
cat h_xxx.txt"
mit allen diesen dateien ausführen!
Noch einmal deutlich bitte: Was willst Du ausführen??? *ratlos*
Gruß
ernohl

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 03.10.2002 20:32:33

sorry,
also ich habe im verzeichniss mehrere (nicht genauer bekannte) dateien, alle im format xxx.txt und u_xxx.txt und h_xxx.txt. wobei es immer ein set aus 3 dateien mit identischem xxx gibt. also zum beispiel:
abc.txt u_abc.txt h_abc.txt
jaja.txt u_jaja.txt h_jaja.txt
456.txt u_456.txt h_456.txt
in diesem fall soltle nun durch das script folgendes ausgeführt werden:
ed abc.txt <u_abc.txt
ed jaja.txt <u_jaja.txt
ed 456.txt <u_456.txt
cat h_abc.txt
cat h_jaja.txt
cat h_456.txt
ich hoffe, es ist jetzt verständlicher geworden!

das problem ist eben, dass ich a) nicht weis wie viele dateitripel dieses formats existieren, und b) das xxx nicht im vorneherein bekannt ist. also müssen irgendwie am anfang die dateien im format u_*.txt ausfinig gemacht werden und eine liste erstellt werden!
ich kann nicht einfach die ausgabe von ls verwenden, da es in dem verzeichniss auch dateien im format xxx.txt ohne dazugehöriges u_xxx.txt und h_xxx.txt gibt! oder doch? und dann ein check dahinterhängen ob es auch eine u_xxx.txt gibt?

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 03.10.2002 20:58:22

arteist hat geschrieben:sorry,
also ich habe im verzeichniss mehrere (nicht genauer bekannte) dateien, alle im format xxx.txt und u_xxx.txt und h_xxx.txt. wobei es immer ein set aus 3 dateien mit identischem xxx gibt. also zum beispiel:
abc.txt u_abc.txt h_abc.txt
jaja.txt u_jaja.txt h_jaja.txt
456.txt u_456.txt h_456.txt
in diesem fall soltle nun durch das script folgendes ausgeführt werden:
ed abc.txt <u_abc.txt
ed jaja.txt <u_jaja.txt
ed 456.txt <u_456.txt
cat h_abc.txt
cat h_jaja.txt
cat h_456.txt
ich hoffe, es ist jetzt verständlicher geworden!

das problem ist eben, dass ich a) nicht weis wie viele dateitripel dieses formats existieren, und b) das xxx nicht im vorneherein bekannt ist. also müssen irgendwie am anfang die dateien im format u_*.txt ausfinig gemacht werden und eine liste erstellt werden!
ich kann nicht einfach die ausgabe von ls verwenden, da es in dem verzeichniss auch dateien im format xxx.txt ohne dazugehöriges u_xxx.txt und h_xxx.txt gibt!
Das alles ist nicht wirklich Smalltalk... :wink:

Ich verstehe auch nicht den Zusammenhang. An Deinem Beispiel sind die cat ... völlig ohne Zusammenhang zu Deinen ed ...

Aber egal, es könnte irgendwie so aussehen:

Code: Alles auswählen

for i in ???.txt
do
TRIPEL=`basename $i .txt`
<mach_was_du_will_mit_$TRIPEL_z.B.: ed $TRIPEL.txt <h_$TRIPEL.txt>
done
Da es oben keinen Zusammenhang zwischen den mit ed (was ist das?) und mit cat bearbeiteten Dateien gibt, kannst Du einfach noch eine ähnliche Schleife mit cat als Kommando anhängen.
Gruß
ernohl

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 03.10.2002 21:10:00

cat und ed haben nicht wirklich einen zusammenhang, außer dem ähnlichen dateinamen =)

ed ist ein editor, es lässt sich per 'diff --ed dateialt dateineu > delta' einfach eine delta-dateien erzeugen, in der der unterschied steht. und nun kann man per 'ed dateialt <delta' diese alte datei über das delta zur neuen machen.

insgesamt geht es darum, bei konfigurationsdateien die alten einstellungen beizubehalten, allerdings die neuen möglichkeiten in die datei hinzuzufügen. somit vergleicht man die uneditierten dateien per diff, und kann dann per ed in die editierte alte datei die zusätzlichen möglichkeiten hinzufügen!

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 03.10.2002 21:34:03

Code: Alles auswählen

for i in ???.txt
do
TRIPEL=`basename $i .txt`
<mach_was_du_will_mit_$TRIPEL_z.B.: ed $TRIPEL.txt <h_$TRIPEL.txt>
done
hier sehe ich folgendes problem: es gibt auch dateien, die vor dem .txt mehr als 3 stellen haben. diese dateien werden nun durch dieses skript nicht beachtet.

am liebsten wäre es mir, als auswahlkriterium u_*.txt zu verwenden. aber wie entfernt man hier nun das praefix u_ ?

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 03.10.2002 21:38:05

arteist hat geschrieben:cat und ed haben nicht wirklich einen zusammenhang, außer dem ähnlichen dateinamen =)

ed ist ein editor, es lässt sich per 'diff --ed dateialt dateineu > delta' einfach eine delta-dateien erzeugen, in der der unterschied steht. und nun kann man per 'ed dateialt <delta' diese alte datei über das delta zur neuen machen.
Ach! Es gibt noch andere Editoren außer vi ??? :wink:
arteist hat geschrieben:insgesamt geht es darum, bei konfigurationsdateien die alten einstellungen beizubehalten, allerdings die neuen möglichkeiten in die datei hinzuzufügen. somit vergleicht man die uneditierten dateien per diff, und kann dann per ed in die editierte alte datei die zusätzlichen möglichkeiten hinzufügen!

Ja, aber da oben editierst Du erst alles möglich und *danach* listest Du irgendetwas anderes auf! Nicht gerade verständlich für eine Problembeschreibung...
Gruß
ernohl

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 03.10.2002 21:48:30

da ich das problem noch nicht selbst ganz durchdrungen habe, sieht das so chaotisch aus =)

aber langsam habe ich was ich will, und du hast mir viel geholfen, auch wenn du evtl nicht wusstest zu was das eigentlich gut ist...DANKE!

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 03.10.2002 22:07:35

arteist hat geschrieben:

Code: Alles auswählen

for i in ???.txt
do
TRIPEL=`basename $i .txt`
<mach_was_du_will_mit_$TRIPEL_z.B.: ed $TRIPEL.txt <h_$TRIPEL.txt>
done
hier sehe ich folgendes problem: es gibt auch dateien, die vor dem .txt mehr als 3 stellen haben. diese dateien werden nun durch dieses skript nicht beachtet.

am liebsten wäre es mir, als auswahlkriterium u_*.txt zu verwenden. aber wie entfernt man hier nun das praefix u_ ?
Sagtest Du nicht Tripel?
Lesetipp: regular expressions :wink:

Code: Alles auswählen

for i in u_*.txt
do
TRIPEL=`basename $i .txt | cut -b 3-`
...
Jetzt ungetestet...
Gruß
ernohl

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 03.10.2002 22:25:08

ja, das skript tut mittlerweile, und zwar ähnlich wie du es gesagt hast =)

Code: Alles auswählen

for i in u_*.txt
do
        ToUse=`basename $i .txt|cut -c 3-`
        ed $ToUse.txt < u_$ToUse.txt
        test -s h_$ToUse.txt && cat h_$ToUse.txt
done
rm u_*.txt
rm h_*.txt
rm no_update.sh
rm update.sh
am ende vernichtet es sich selbst und alle anderen dateien, da die im weiteren prozess stören würden!

Antworten