listenausgabe in array?

X

xeeen

Mitglied
hi,

ein

Code:
cat adresses | grep @isp.com

gibt eine liste aller adressen aus, die auf @isp.com enden. diese würde ich am liebsten in einem array (?) speichern, um später an jede adresse eine mail zu versenden bzw. um die adressen bei bedarf an verschiedenen stellen wieder zu verwenden.

wie kann ich das realisieren?
 
Useless use of cat

Code:
VAR=`grep '@isp.com' adresses`

In der bash gibt es AFAIK keine Arrays. Kann mich aber auch taeuschen.

Nimm doch lieber Perl.
 
Mit awk z.B. ...
Etwas in der Art habe ich hier (Link) schonmal gepostet.
 
danke erstmal. mein ansatz ist nun aber ein 'einfacherer':

Code:
#!/bin/bash

Addr=(`cat addresses | grep @isp.com`)

Quan=`cat addresses | wc -l`
i=0

while [ $i -le $Quan ]

do

echo ${Addr[$i]}
i=`expr $i + 1`

done

soweit, sogut. funzt.

nun würde mich allerdings interessieren, ob ich gezielt eine bestimmte stelle im array ansprechen kann, z.b. der 3te "eintrag" im array, ohne diesen explizit zu definieren, also nicht mit

Code:
echo ${Addr[2]}

sondern eben irgendwie... automatisch. :think:
 
nun würde mich allerdings interessieren, ob ich gezielt eine bestimmte stelle im array ansprechen kann, z.b. der 3te "eintrag" im array, ohne diesen explizit zu definieren, also nicht mit

Code:
echo ${Addr[2]}

sondern eben irgendwie... automatisch. :think:
Du willst etwas gezielt adressieren, ohne ein Ziel anzugeben? Erklär mal :-)
 
naja, ich kann ja zb. nicht den 4ten eintrag wählen, wenn es diesen überhaupt nicht gibt, bzw. wie kann ich wissen, wie viele einträge es gibt?

mein ziel ist es, hier an jede adresse eine mail zu versenden.

brauche ich dazu einfach eine weitere for schleife?
 
Hallo
In der Manpage zur Bash steht alles über Arrays.
Die Länge kannst du so feststellen:
Code:
A=(eins zwei drei); echo ${#A[*]}
3
Über ein Array iterieren:
Code:
for i in "${A[@]}"; do echo $i;done
eins
zwei
drei

Solche Dinge wie:
Code:
i=`expr $i + 1`
Solltest du besser lassen, und das mindestens 10x schneller Buildin verwenden.
Demonstration:
Code:
$ a=0;for i in {1..10}; do echo $a; ((a++));done
0
1
2
3
4
5
6
7
8
9

Schau dir mal das hier als Vergleich an:
Code:
$ a=0; time for i in {1..10000}; do a=$(expr $a + 1 );done

real  0m16.452s
user  0m3.560s
sys   0m12.893s
wolle@Nietzsche:/tmp/video
$ a=0; time for i in {1..10000}; do ((a++));done

real  0m0.108s
user  0m0.104s
sys   0m0.004s

Gruß Wolfgang
 

Ähnliche Themen

Linux System Admin (w/m/g)/innovatives SW-Unternehmen/Vollzeit/ HomeOffice/asap

Keine grafische Oberfläche (Debian Installation)

Linux "vergisst" Dateisystem?

Queue für copy Script

FreeBSD oder Linux?

Zurück
Oben