[ Gelöst ] Einzeiler-Schleife mit Übergabe

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

[ Gelöst ] Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 03.01.2015 02:29:03

Hallo zusammen! :D

Ich will das

Code: Alles auswählen

sed '1r wenigtext.txt' vieltext.txt > ausgabe
für alle Dateien im Verzeichnis auf einmal machen.
Ich weiß, mit einer Schleife, aber so ganz sicher bin ich mir nicht, wie ich das anstellen soll, damit die Dateien im Verzeichnis auch als Variable übergeben werden.
Deshalb dachte ich mir, ich frag die Spezis hier. :THX:

Viele Grüße
Zuletzt geändert von Inkodiktus am 06.01.2015 11:11:48, insgesamt 1-mal geändert.
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

DeletedUserReAsG

Re: Einzeiler-Schleife mit Übergabe

Beitrag von DeletedUserReAsG » 03.01.2015 02:39:44

for I in *; do mach_was_mit $I; done

Gegebenenfalls quoten, wenn Dateien mit Leer-/Sonderzeichen im Namen zu erwarten sind. Wenn »ausgabe« nicht bei jedem Durchlauf überschrieben werden soll, würde sich statt ›>‹ eher ›>>‹ anbieten. Weitere Informationen im Bash Guide for Beginners (vorausgesetzt, du nutzt die bash – diesbezügliche Infos enthälst du uns ja vor). Bei Unsicherheit empfiehlt sich generell, mit z.B. „do echo mach_was_mit $I;“ zu schauen, ob alles ordnungsgemäß laufen würde.

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 03.01.2015 13:29:22

Ich wurde wohl nicht ganz verstanden.
Die viele Dateien sollen anstatt vieltext.txt sein.

Dann müsste es so aussehen?

Code: Alles auswählen

for I in *; sed '1r wenigtext.txt' $i > ausgabe; done 
Nur ausgabe sollte eine andere Datei sein als die letzte ausgabe. :)
So wie ich das verstehe, würden sich alle Dateien in die ausgabe kopieren bzw. überschreiben und es gäbe nur eine ausgabe Ausgabedatei.
Und es wäre schon, wenn die Datei "ausgabe" den gleichen Namen plus vielleicht nur eine Zahl hätte.
Noch besser wäre, wenn man die alten Dateien löscht und die neuen dann wie die alten wären.
Verstanden? :)

Und ja, es soll Bash sein.
Zuletzt geändert von Inkodiktus am 03.01.2015 13:35:22, insgesamt 1-mal geändert.
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

DeletedUserReAsG

Re: Einzeiler-Schleife mit Übergabe

Beitrag von DeletedUserReAsG » 03.01.2015 13:34:19

Und den Guide hast du dir mal angeschaut?

Abgesehen davon: das ist case-sensitive. for I in …; do irgendwas_mit $i; done wird nicht funktionieren. Steht aber auch alles im verlinkten Dokument.

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 03.01.2015 13:39:19

niemand hat geschrieben:Und den Guide hast du dir mal angeschaut?

Abgesehen davon: das ist case-sensitive. for I in …; do irgendwas_mit $i; done wird nicht funktionieren. Steht aber auch alles im verlinkten Dokument.
Echt? :mrgreen:
na ja, vielleicht weiß jemand anderer die Antwort.
Oder es geht wieder mal nicht, wie bei den Signalen. :facepalm:
Ah ja, ich frage nicht, um dann zu lesen, dass ich ein Buch lesen soll, das mache ich nämlich so wieso.
Merk schon...
Zuletzt geändert von Inkodiktus am 03.01.2015 13:44:45, insgesamt 1-mal geändert.
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

DeletedUserReAsG

Re: Einzeiler-Schleife mit Übergabe

Beitrag von DeletedUserReAsG » 03.01.2015 13:43:23

Ja, echt. Die Antwort steht oben, du musst sie nur auf deine Bedürfnisse anpassen. Dazu müsstest du aber zumindest schon mal was von Variablen gehört, und eine Ahnung haben, wie sie in der bash benutzt werden. Grundlagen halt, deswegen habe ich den Beginners Guide verlinkt.

Aber ja, vielleicht findet sich jemand, der dir eine Copypasta kocht. Ich bin’s nicht – ein derartiges Maß an Faulheit unterstütze ich nicht. Wenn’s wenigstens ein spezielles Problem wäre, vielleicht – aber das sind ja die einfachsten Basics, die du da vorverdaut haben willst ….

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 03.01.2015 13:51:54

Leute ich habe meinen ersten Hater!
Und das flamewar ist damit eröffnet :D
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

DeletedUserReAsG

Re: Einzeiler-Schleife mit Übergabe

Beitrag von DeletedUserReAsG » 03.01.2015 13:57:38

Also geht‘s dir gar nicht darum, die Shell benutzen zu können? Dann möge ein Mod das bitte nach Smalltalk schieben.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Einzeiler-Schleife mit Übergabe

Beitrag von NAB » 06.01.2015 03:17:46

Inkodiktus hat geschrieben:

Code: Alles auswählen

for I in *; sed '1r wenigtext.txt' $i > ausgabe; done 
Nur ausgabe sollte eine andere Datei sein als die letzte ausgabe. :)
So wie ich das verstehe, würden sich alle Dateien in die ausgabe kopieren bzw. überschreiben und es gäbe nur eine ausgabe Ausgabedatei.
Stimmt, das siehst du richtig, die wird immer wieder neu überschrieben. Mit >> würdest du hinten an die Datei dranschreiben, hättest aber immer noch nur eine ausgabe-Datei.
Inkodiktus hat geschrieben:Und es wäre schon, wenn die Datei "ausgabe" den gleichen Namen plus vielleicht nur eine Zahl hätte.
Das könnte man ja einbauen ... > ausgabe; mv ausgabe $I.neu; done
Inkodiktus hat geschrieben:Noch besser wäre, wenn man die alten Dateien löscht und die neuen dann wie die alten wären.
Auch das könnte man einbauen ... > ausgabe; rm $I; mv ausgabe $I; done
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 06.01.2015 04:31:50

Auch das könnte man einbauen ... > ausgabe; rm $I; mv ausgabe $I; done
Bin etwas geplättet. :mrgreen:
Was ist $l???
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

DeletedUserReAsG

Re: Einzeiler-Schleife mit Übergabe

Beitrag von DeletedUserReAsG » 06.01.2015 05:40:37

Was ist $l?
Die Variable, die mittels »for I in …« gefüllt worden ist. Ich würde übrigens statt »> ausgabe; rm $I; mv ausgabe $I; done« eher »> ausgabe && rm $I && mv ausgabe $I« schreiben, so blieben die Originaldaten im Fehlerfall erhalten.

Du bist sicher, dass du dir zumindest die Grundlagen nicht einmal anschauen möchtest? Dort hättest du neben »A=blub [Enter] echo $A [Enter] → Ausgabe: blub« auch gleich noch von deinem fehlenden »do« im Bash-Schleifenkonstrukt »for …; do …; done« lesen können und es tatsächlich zum Laufen gebracht.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Einzeiler-Schleife mit Übergabe

Beitrag von NAB » 06.01.2015 05:43:47

Inkodiktus hat geschrieben:Was ist $l???
Das ist die Variable I, über die die Schleife läuft.

Code: Alles auswählen

$ echo Dateiname $I
Dateiname
$ I=blubb
$ echo Dateiname $I
Dateiname blubb
$ I=blah
$ echo Dateiname $I
Dateiname blah
Probiere mal folgendes Script aus:

Code: Alles auswählen

for I in *; do echo Dateiname $I; done
(Das macht das gleiche wie der ls Befehl)
Die innere Anweisung lautet "echo Dateiname $I". Die kannst du durch beliebige andere Befehlsfolgen ersetzen, und die Schleife so anpassen.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 06.01.2015 11:10:03

@NAB: Ich habe meinen Gott gefunden!
:THX: :hail: :hail: :hail: :hail: :hail: :hail: :THX:
:THX: :THX: :THX: :THX: :THX: :THX: :THX: :THX:

Mir ist echt nicht in den Kopf gegangen, dass es so einfach sein konnte!!! :facepalm: :mrgreen:
Habe schon an so etwas gedacht, aber für mich war es unlogisch. :)
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: [ Gelöst ] Einzeiler-Schleife mit Übergabe

Beitrag von NAB » 06.01.2015 18:04:41

*check* ... wieder ein neuer Jünger!

Man opfere mir Jungfrauen, Gold und edles Geschmeide!
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

DeletedUserReAsG

Re: [ Gelöst ] Einzeiler-Schleife mit Übergabe

Beitrag von DeletedUserReAsG » 06.01.2015 18:31:55

Ach, der ist wechselhaft. Der hängt genau solange an dir, bis du was schreibst, das ihm nicht gefällt :)

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: [ Gelöst ] Einzeiler-Schleife mit Übergabe

Beitrag von NAB » 06.01.2015 18:45:00

Nunja ... es sollte ihm bekannt sein, welche Plagen über Ketzer hereinbrechen.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: [ Gelöst ] Einzeiler-Schleife mit Übergabe

Beitrag von Inkodiktus » 06.01.2015 20:43:45

Du bist nur mein Debian Gott, also nix besonderes. :P :mrgreen: :mrgreen:
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

Antworten