PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shell: datei auslesen bei vielen zeilen ?



holzkbri
11.05.2004, 12:56
Hallo an euch alle,
ich bekomme meine schleife einfach nicht hien.
ich habe drei datein. in jeder datei sind unterschiedlich viele zeilen drin.
ich muss in einer schleife, diese zeilen auslesen. und jede zeile in eine variable speichern.
hat jemand von euch eine idee wie ich das unter shell hienbekomme?

ihr würdet mir sehr helfen

mfg
holzkbri

rhythm
11.05.2004, 13:15
was genau hast du denn mit dem skript vor, bzw was soll mit den zeilen der dateien geschehen? wenn du einzelne zeilen nacheinander auslesen willst, dann versuch folgendes:

while read LINE; do
mach was mit $LINE
done < dateiname

hoffe, dass ist ein ansatz, der dir hilft...

holzkbri
11.05.2004, 13:21
so war der ansatz super
das problem ist jetzt halt nur
das ich jede einzelne zeile in eine variable speichern muss

in jeder zeile sind verzeichnisse angegeben.
und jedes verzeichniss muss in eine variable geaschrieben werden.
vertstehst du mich?

snax
11.05.2004, 13:43
weise doch einfach jede zeile einem array zu fertig. dann hast du jede zeile bzw. jede verzeichnis angabe in einer variablen :)

array[n]=wert

holzkbri
11.05.2004, 13:53
genau und das ist mein problem
wie ich das z.b. in deinen ansatz mit einbinden würde

rup
11.05.2004, 20:38
Suchst du das:



#!/bin/bash

cat a.txt b.txt c.txt | while
read line
do
# mach irgend etwas
echo "Ausgabe: $line"
done

meez
12.05.2004, 17:17
#! /bin/bash

set -A vars
set -i n=0
while read zeile ; do
vars[n]="$zeile"
n=n+1
done < /file.ftxt

Du kannst maximal 4096 Zeilen einlesen, da Arrays nur 2^12 Felder haben.

holzkbri
13.05.2004, 06:32
Suchst du das:



#!/bin/bash

cat a.txt b.txt c.txt | while
read line
do
# mach irgend etwas
echo "Ausgabe: $line"
done


ersmal danke für diene hilfe
leider speichert er bei dir alles in $line
er soll am besten. jede zeile einer datei in eine extra variable speichern
hast du da eine idee

holzkbri
13.05.2004, 06:41
hi
auch dir danke, das du versuchst mir zu helfen
ergent wie ist -i verkehrt. komtm die meldung bad option. :-(

meez
13.05.2004, 10:50
set -A vars
n=0
while read zeile ; do
vars[n]="$zeile"
n=`expr $n + 1`
done < /file.ftxt

holzkbri
13.05.2004, 10:54
jep danke
aber er speichert doch nicht jede einzelene zeile
so das ich sie mti eineme cho abrufen kann

meez
13.05.2004, 10:59
Doch...Er kann ja gar nicht anderst..:D

Es gibt natürlich noch eine andere Lösung, ohne einen Array:

n=1
while read line ; do
eval "line$n=\"$line\""
n=`expr $n + 1`
done < file

Das ergibt Variablen die so heissen: line1, line2....

holzkbri
13.05.2004, 11:04
achso
guckmal ich habe das jetzt so gemacht

n=1
while read line ; do
eval `line$n=\"$line\"`
n=`expr $n + 1`
done < $DATAFILE

echo "line1";
echo "line2";

der fehler ist so ( komisch. der bringt mir das richtige raus aber..)

./test2.sh[36]: line1="/ora_2/oradata/DBTEST33/system01.dbf": not found
./test2.sh[36]: line2="/ora_2/oradata/DBTEST33/undotbs01.dbf": not found
./test2.sh[36]: line3="/ora_2/oradata/DBTEST33/indx01.dbf": not found
./test.sh[36]: line4="/ora_2/oradata/DBTEST33/tools01.dbf": not found
./test2.sh[36]: line5="/ora_2/oradata/DBTEST33/users01.dbf": not found
line1
line2

meez
13.05.2004, 11:10
Aendere bei eval ` zu "

holzkbri
13.05.2004, 11:13
du bist ein schatz :-)

danke für diene große hilfe

holzkbri
13.05.2004, 11:14
jetzt muss ich nur noch mti basename rum spielen das ich die datei und den pfad in zwei verschieden habe

meez
13.05.2004, 11:26
DIRNAME=`dirname $lineX`
FILENAME=`basename $linX`

holzkbri
13.05.2004, 11:29
wow so schnell und so gut

vielen dank. du hast mir echt sehr geholfen
:)