PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SH-Script | ls ausgabe jeder Zeile etwas davorhängen



Individuum
03-12-2002, 15:34
Tach,
ich habe ein Problem und zwar brauche ich ein script das eine Datei erstell und in diese die aus gabe einen ls schreibt aber vorher noch sound/misc/ vor jede Zeile schreibt und dann erst den Dateinamen:

Daten:
sound1.wav
sound2.wav
xyz.wav
Ausgabe:
sound/misc/sound1.wav
sound/misc/sound2.wav
sound/misc/xyz.wav

Ich habe bis jetzt volgendes:


#!/bin/sh
daten=`ls *.wav`
anzahldaten=`ls *.wav | wc -w `

Ich denke ich muss mit einer while schleife und dem hoch counten der anzahldaten weiter machen, wass ich aber nicht weiss ist wie ich dann jeder zeile, jeder datei etwas davor setze und das ganze in eine datei schreibe.

PS: ich beschäftige mich erst zeit kurzem mit sh, hab vorher nur php gemacht!

micha
03-12-2002, 16:14
Hi,



#!/bin/sh
file='/tmp/daten.txt'

ls *.wav | awk '{print "/sound/misc/" $1}' > $file


oder



#!/bin/sh
file='/tmp/daten.txt'
prefix='/sound/music/'

for i in *.mp3
do
echo $prefix$i >> $file
done


Gruß micha

Individuum
03-12-2002, 16:36
danke funktionert!
kannst du bitte noch erklären was du da gemacht hast, weil ich möchte gerne verstehn was ich schreibe und es so in wieteren scripts anwenden.

danke

micha
03-12-2002, 18:57
Hi,

vielleicht andersrum: was ist Dir denn nicht klar ?

Schau auch mal hier (http://www.linuxfibel.de) unter Shells->Bash Programmierung und in den Links in fork´s Signatur ;)

Gruß micha

Individuum
03-12-2002, 19:06
gut die linux fibel beschreibt ja alles recht auführlich, sprich awk


thx

Badsteve
03-12-2002, 19:21
hier noch in Perl
#!/usr/bin/perl -w

opendir(DH, ".");
while(defined($name=readdir(DH))){
print "sound/misc/$name\n" if $name=~m/.*.\.wav;
}
closedir DH;

micha
03-12-2002, 19:24
Mit dem awk print Befehl kannst Du wie hier zum Beispiel auf einzelne Spalten (hier getrennt durch ein Leerzeichen oder Tabulator) in einem String über die Variablen $1,$2,$3,.... zugreifen.
Beispiel:



string="spalte1 spalte2 spalte3"

echo $string | awk '{print $1 $2 $3}'
echo $string | awk '{print $1" "$2" "$3}'
echo $string | awk '{print $3 $1 $2}'


Ausgabe:



spalte1spalte2spalte3
spalte1 spalte2 spalte3
spalte3spalte1spalte2


Gruß micha

tkortkamp
03-12-2002, 19:40
Noch einmal in Perl:

perl -e 'foreach(<*.wav>){print "sound/misc/$_\n"}'

c ya,
Tobias

sticky bit
04-12-2002, 00:17
Nur zwecks "There's more than one way to do it":


ls *.wav | (while read file; do echo "sound/misc/$file"; done)

Individuum
04-12-2002, 16:24
kurze frage zu awk:

wie is es wenn ich z.b. einen bestimmten string löschen möchte wie
dateiname.dateiendung
wird zu
dateiname

geht das??
wir mich mal interesiern weil is ganz praktisch


achso danke für die vielen antwortn, ich machs jetzt mit awk.

Badsteve
04-12-2002, 16:29
awk -F '.' '{print $1}'

Individuum
04-12-2002, 16:34
langsam!, ;D

kannst du das bitter erklären= die parameter und deren funktion

weil ich möchte gerne die bedeutung und funktion der sachen wissen die ich in scripten verwende.

Danke

:-)

Badsteve
04-12-2002, 16:40
-F stellt den Separator auf eiin bestimmtes Zeichen, Standart ist Leerzeichen in deinem Fall ist es aber ein Punkt! und "print $1" gibt den ersten Teil bis zum Separator aus. "print $2" würde also "dateiendung" ausgeben. Die ' sind dazu da dass die Anweisungen nicht von der Shell verschluckt werden.

www.linuxfibel.de <-- wie ich finde gutes awk-Howto, obwohl ich es nur überfolgen habe. Ich zwar kein awk-Profi, aber soweit ich es brauche kann ichs!