Array

F

flugopa

Hallo,

Textdatei "test.txt" mit dem Inhalt:
wort1 wort2 zahl1 zahl2

Wie sollte man diese Datei auslesen damit die Variablen
Code:
echo "$Var[1]" # wort1
echo "$Var[2]" # wort2
echo "$Var[3]" # zahl1
echo "$Var[4]" # zahl2

So geht es nicht
#!/bin/sh
VAR=`cat test.txt | awk '{print $1,$2,$3,$4}'`
echo "$VAR[1]"
echo "$VAR[2]"
echo "$VAR[3]"
echo "$VAR[4]"

erhalte?
 
Hast du dir mal die Option -a für das Bash-buildin read angesehen? ;)

Gruß Wolfgang
 
Hast du dir mal die Option -a ...

Danke für den Tip.
Wenn ich darf; Frage ich gleich weiter: (siehe Code)
Ergebnis:
Code:
declare -a ARRAY_1
ARRAY_1=(wort1 wort2 zahl1 zahl2)

ARRAY_INHALTS_ZAEHLER= ??? # << Wie bekomme ich die Anzahl der Einträge aus ARRAY_1 ?

for (( Zaehler = 0; $ARRAY_INHALTS_ZAEHLER > Zaehler; Zaehler++ ))  do
    echo "$Zaehler: ${ARRAY_1[$Zaehler]}"
done
unset ARRAY_1 Zaehler
 
Du suchst eventuell das hier:
Code:
$ARRAY_INHALTS_ZAEHLER=${#ARRAY_1[@]};
Andererseits läßt die Bash ein einfacheres Verarbeiten von Arrays zu, d.h. die C-Syntax ist nicht nötig.
Code:
ARR=(Wert1 Wert2 Wert3);
for i in "${ARR[@]}"; do
echo $i
...
done
Wobei der Sonderfall: "${ARR[*]}" alle Elemente zu einem String joint.

Gruß Wolfgang
 
Danke für Dein Tip.
Frage: Seit wieviel Jahren beschäftigst Du dich mit Linux?

Ergebnis der Hilfe:
Code:
$ cat Array.sh
#!/bin/sh
clear
declare -a ARRAY_1
ARRAY_1=(1234567 wort2 zahl1 zahl2 88)

#cat test.txt >$ARRAY_1

ARRAY_INHALTS_ZAEHLER=${#ARRAY_1[*]}
echo -e "Es sind $ARRAY_INHALTS_ZAEHLER Einträge vorhanden.\n"

for (( Zaehler = 0; $ARRAY_INHALTS_ZAEHLER > Zaehler;Zaehler++ ))  do
    echo -e "Eintrag `expr $Zaehler + 1` : ${ARRAY_1[$Zaehler]}\tZeichenlänge: ${#ARRAY_1[$Zaehler]}"
done

unset ARRAY_1 Zaehler
 
Bourne shell hat keine arrays. Nimm lieber /bin/ksh oder /bin/bash als shebang. (wahrscheinlich bash.)
Und wenn du schon diese c-for-schleife benutzt, kannst du auch statt `expr $z + 1` einfach $(($zaehler+1)) nehmen.
Ich würde von der c-for-Schleife abraten, selbst, wenn du den aktuellen array-Index brauchst. Das scheint zwar eher ein Testscript von dir zu sein, aber ich sags trotzdem mal.
Der Sinn vom "declare -a" erschließt sich mir nicht, aber naja.
Das array musst du am Ende auch nicht unsetten, das geht ja mit Ende des Skripts "out of scope". (Es sei denn du "sourced" das Skript, womit deine shebang wiederum sinnfrei wäre...)
 
Wer das missachtet, muss sich nicht wundern, wenn die Antworten zur Standardshell unter Linux bekommt.
Sollte /bin/sh ein Link auf die bash sein, geht es.
Geht es um den unter Buntie üblichen Link auf die DASH geht es so nicht.

Dash kennt IMHO weder Array noch declare

@Gott_in_schwarz
Ich glaube eher nicht, dass der TE das Orginal (Bourne Shell) verwendet.

Gruß Wolfgang
 

Ähnliche Themen

chown Befehl in einem Script

sed in awk

E/A-Fehler (.snapshots is not a btrfs subvolume).

Grafische Anzeige der Temperatur

Zeilen behalten, die Werte in einem bestimmten Bereich enthalten

Zurück
Oben