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!
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
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;
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!
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.