Array set -A

T

Tommy_WY

Mitglied
Hallo zusammen,

ich hab da noch ein Problem... doof... ist aber so :hilfe2:

Hab mir alles aus einem Directorys in eine Datei ge grep t

ls -lRatr|grep date >${WD}/show_dir.log

Dann zieh ich mir nur nur die Unterverzeichnisse aus dieser Datei und hierbei nur bestimmte, die ich in einer anderen Datei ablege (nur mit den Namen aus $9)

cat show_dir.log |awk '/^d/&&/EAR$/ {print $9}' >${WD}/dir_names.log

Kommen wir jetzt zu dem Problem.
Ich möchte genau diese Verzeichnisse in einem Array ablegen, damit ich sie für diverse Zwecke nutzen kann.
Wie geht das?
Für Hilfe wäre ich wirklich dankbar.

Gruss
Tommy
 
ungetestet:
Code:
typeset -i x=1
while read line
do
VAR1[x]=${line}
(( x = x + 1 ))
done < ${WD}/dir_names.log
 
naja, du brauchst zB eine Schleife, die dir Datei für Datei (Ordner für Ordner) in das Array packt.
in ruby ginge das so

Code:
..
array = []
while entry = dir.read
	if entry != "." && entry != ".."
	inhalt.push entry
	end
end


Ciao
 
Von welcher Programmiersprache redest du denn? (wenn die Antwort "shell" ist: von welcher shell redest du denn?)
Meine bash kennt kein ${WD} (working directory?), nur ${PWD}, wobei man sowas auch (bei Pfadangaben) durch einen Punkt ersetzen kann. (Zumindest, wenn man keinen absoluten Pfad braucht, was bei dir imho der Fall ist..)

Hier mal einige Beispiele für Arraydeklarationen in bash:
Code:
arrayA=(1 2 3 4)
arrayB=(a b c d ef)
arrayC=(foo
bar
baz)
arrayD=( $(echo "ich bin die ausgabe eines kommandos") )
In der ksh (und damit auch zsh) scheint das soweit auch zu funktionieren.
Zugriff auf arrays:
Code:
echo ${arrayA[0]} # gibt "1" aus
echo ${arrayB[2]} # gibt "c" aus
echo ${arrayC[1]} # gibt "bar" aus
echo ${arrayD[3]} # gibt "ausgabe" aus
 
Hi ich rede von der ksh, weil ich trouble mit der bash und dem autoload von functions hatte.
Ich habe eine Datei die dir_names.log, in der sich jetzt die Verzeichnisse befinden. Der Inhalt, den ich ja so nicht kenne, deswegen lese ich ihn aus und deklariere das Array nicht so... das war lang... Der Inhalt der Datei soll eben Zeile für Zeile in das Array abgelegt werden.

also soll echo $array[1] von mir aus das folgende beinhalten irgendeinEAR
und in $array[2] soll "einanderesEAR" stehen.
Das alles eben bis ich alles Verzeichnisse im Array hab.

Gruss
Tommy
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

aja und $WD ist meine Variable für mein spezielles WorkingDir
und ich baue ein shell script
 
Zuletzt bearbeitet:
sorry, aber ich kann dir grade garnicht mehr folgen.

was hast du und was willst du
(kennst du die Ordnertiefe; wie soll am Ende das Array (die Arrays?) aussehen) ?


Ciao
 
in meinem WD existiert ein dir LOGS unter LOGS existieren die besagten Ordner, die sich jetzt in der datei dir_names.log befinden.
diese namen will ich in einen array extrahieren.. zeile für zeile ... das ist alles
 
Dann ungefähr so wie noxqs das gezeigt hat:
Code:
i=0
while read logfile; do
    arrayFoo[$i]="$logfile"
    ((i++))
done < inFile
 
Der Vollständigkeit halber: Diese Version ist nur dann notwendig, wenn sich in einer Zeile auch mal Leerzeichen befinden.
Aber sogar dann würde es auch so gehen:
Code:
OLD_IFS="$IFS"
IFS=$'\n' array=( $(echo -e "zeile 1 mit leerzeichen\nnoch mehr leerzeichen") )
echo ${array[0]}
echo ${array[1]}
IFS="$OLD_IFS"
unset OLD_IFS
Statt des echo-Kommandos könnte natürlich jedes Kommando genommen werden... (zum Beispiel "cat datei_mit_den_logfiles" oder so..)
 

Ähnliche Themen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

grep und Variablen

X52 Hotas und udev

awk Probleme bzw. datenbank herauslesen

Open-Xchange auf OpenSuse mit Commu. Installer - Compiler Fehler

Zurück
Oben