dateiname auseinandernehmen.
dateiname auseinandernehmen.
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
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
Re: dateiname auseinandernehmen.
Noch einmal deutlich bitte: Was willst Du ausführen??? *ratlos*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!
Gruß
ernohl
ernohl
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?
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?
Das alles ist nicht wirklich Smalltalk...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!
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
Gruß
ernohl
ernohl
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!
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!
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
am liebsten wäre es mir, als auswahlkriterium u_*.txt zu verwenden. aber wie entfernt man hier nun das praefix u_ ?
Ach! Es gibt noch andere Editoren außer vi ???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.
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
ernohl
Sagtest Du nicht Tripel?arteist hat geschrieben: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.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
am liebsten wäre es mir, als auswahlkriterium u_*.txt zu verwenden. aber wie entfernt man hier nun das praefix u_ ?
Lesetipp: regular expressions
Code: Alles auswählen
for i in u_*.txt
do
TRIPEL=`basename $i .txt | cut -b 3-`
...
Gruß
ernohl
ernohl
ja, das skript tut mittlerweile, und zwar ähnlich wie du es gesagt hast =)
am ende vernichtet es sich selbst und alle anderen dateien, da die im weiteren prozess stören würden!
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