PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : im script einzelne zeilen aus textdatei lesen?



jean_luc_picard
02.11.02, 17:47
hallo leute...

wie kann man eigentlich z.b. in einem script auf den inhalt einzelner zeilen einer textdatei zugreifen (auslesen)?
also wenn man z.b. ne datei hat, die als liste zu sichernder verzeichnisse dient, und man in nem backup-script auslesen will... man kann natürlich die verzeichnisse direkt ins script eintragen, aber mir gehts ja nur ums prinzip...

danke, picard

kks_feat_curse
02.11.02, 18:00
hi,
wie genau meinst du das ? (vielleicht mal ein kleines beispiel)

so wie ich dich verstehe, willst du aus ner textdatei z.B. zeilen die ein bestimmtes wort enthalten auslesen.....stimmt das so ungefähr ? dafür würd ich einfach die dateien 'cat'en und dann nach bestimmten Mustern greppen.

man cat
man grep

falls ich dich missverstanden hab, sorry

dauni
02.11.02, 18:05
ich denke, die Datei mit den VErzeichnissen sieht so aus:
/home/user1
/etc/
/blah

und das script soll dann die genannten verzeichnisse verarbeiten......

im moment is mein köpfl zwar hohl aber mir schwant, dass man das mit leichtigkeit hinkriegt ;)

kks_feat_curse
02.11.02, 18:09
for i in `cat sowieso.txt`
do
#mach was du willst
fi
done


meinst du sowas ? $i enthält danach die entsprechende zeile....


kks

jean_luc_picard
02.11.02, 18:09
... mir auch, wenn ich wüsste wie es geht ;) ... leider bin ich gerade erst angefangen mit lernen... ich suche auch schon die ganze zeit im netz... aber irgendwie werde ich noch nicht so recht schlau draus...

jean_luc_picard
02.11.02, 18:33
ja, so meinte ich das...

hmmm... also ich wollte das einfach mal testen:




#!/bin/bash

for i in 'cat liste.txt'
do
{
echo dieses verzeichnis $i
}
fi
done


so funktioniert das nicht (für euch warscheinlich klar)... seid bitte nachsichtig ;) ... ich bin anfänger...

dauni
02.11.02, 18:37
echo "Längere Texte bitte unter Anführungszeichen"

dauni
02.11.02, 18:41
Und hoppala:



#!/bin/bash

for i in `cat liste.txt`; do

echo "dieses verzeichnis $i"

done


Damit i die Ausgabe von "cat blah" bekommt, muß dieses in ` ` stehen

jean_luc_picard
02.11.02, 18:44
funktioniert auch mit " .... " nicht...

irgendwie ist mir das noch nicht klar... das i soll doch die anzahl der durchläufe sein, oder? woher soll denn der wert für i kommen? wofür steht das "in" und die cat-anweisung würde doch den gesamten inhalt der datei wiedergeben :confused:

jean_luc_picard
02.11.02, 18:50
es wird folgendes ausgegeben:

dieses verzeichnis cat liste.txt



:confused:

dauni
02.11.02, 18:56
Kopiere das von mir gepostete Script, schau, dass die Datei liste.txt vorhanden und mit einträgen bestückt ist - mach das Script ausführbar starte es und dann vergleiche deines mit meinem

dauni
02.11.02, 18:58
Ansonsten sei dir http://www.linuxfibel.de/bashprog.htm ans Herz gelegt

jean_luc_picard
02.11.02, 19:48
also das script von dir läuft nur so wie schon beschrieben :(
die linuxfibel hab ich auch schon herangezogen... aber da wird hauptsächlich beschrieben, wie man daten in eine datei schreibt oder daten in einer datei kontolliert/vergleicht, zu meinem problem hab ich nichts gefunden...

also, mit grep kann ich leicht herausfinden wie viele zeilen eine datei hat... nun muss es doch einen befehl geben, der mir den inhalt einer zeile, deren nummer ich als parameter vorgebe, zurückliefert...

cirad
02.11.02, 19:55
Für soetwas ein eigenes Script zu machen, ist recht aufwendig, oder?

for a in $(cat liste.txt); do echo dieses verzeichnis $a; done
oder
while read a; do echo dieses verzeichnis $a; done < liste.txt

Anstatt `` solltest du dir am besten gleich $() angewöhnen. `` werden bei Verschachtelung recht schnell nervig.

PS: Du kannst den String hinter echo mit "dieses verzeichnis $a" zusammenfassen, nötig ist es aber in dem Fall nicht, da echo auch mehrere Strings akzeptiert.

cirad
02.11.02, 19:56
Ok, hab gerade gesehen, daß es ja um Scripts geht. (: Na da kanns man dann auch untereinander schreiben.

jean_luc_picard
02.11.02, 21:25
sehr schön... so klappt es... danke!

irgendwie checke ich das mit der for-schleife aber trotzdem nicht... ich kenne die programmiersprache C ... vom aufbau her ist das ja ähnlich, aber ich kann in der angabe einfach keine for-bedingung finden...

zander
03.11.02, 10:09
Du musst die shell for Anweisung anders lesen als z.B. die von C; die for Anweisung der shell erwartet eine Liste und führt dann die gewünschten Anweisungen für jedes Element dieser Liste aus, während die for Schleife in C einen Ausdruck erwartet. Daran kann man bereits erkennen, dass eine for Schleife für die Lösung Deines Problems nicht besonders gut geeignet ist, insbesondere wenn es sich um grosse Dateien handelt.

cirad
03.11.02, 18:51
Daher meine zweite Lösung mit while. (: