it-swarm.com.de

Verwenden mehrerer Variablen in einer for-Schleife

Ich möchte zwei Variablen in einer for -Schleife wie folgt verwenden (Dies ist zum Beispiel so, dass ich keine seq -ähnlichen Operationen ausführen werde)

for i j `seq 1 2` 'www.google.com www.yahoo.com';do echo $i $j;done

Erwartete Ausgabe ist

1 www.google.com

2 www.yahoo.com

4
SuperKrish

Wenn i nur eine Zahl sein soll, die mit jeder Zeichenfolge inkrementiert wird, können Sie eine for -Schleife verwenden und i mit jeder Iteration inkrementieren.

Zum Beispiel:

i=1; for j in 'www.google.com' 'www.yahoo.com'; do echo "$((i++)) $j"; done
9
Jake

Erstellen Sie eine Variable, die auf den Speicherort der Datei verweist

FILE="/home/user/myfile"

Der Dateiinhalt:

www.google.com 
www.yahoo.com

So erhalten Sie die Ausgabe von:

1 www.google.com
2 www.yahoo.com

Dies kann mit einer der folgenden Methoden erfolgen:


Verwenden der Zählervariable:

i=1; 
cat $FILE | while read line; do 
    echo "$((i++)) $line"; 
done

cat -n verwenden (alle Ausgabezeilen nummerieren)

cat -n $FILE | while read line; do 
    echo "$line"; 
done

Array verwenden:

array=(www.google.com www.yahoo.com);
for i in "${!array[@]}"; do 
    echo "$((i+1)) ${array[$i]}"; 
done

Wenn Ihre Datei bereits Zeilennummern enthält, Beispiel:

1 www.google.com
2 www.yahoo.com

Schleife und teile jede Zeile in ein Array:

cat $FILE | while read line; do
    col=( $line ); 
    echo "${col[0]} ${col[1]}"; 
done

Für mehr Information:

4
Benny

Hier sind einige alternative Wege, zwei kurze und einfache:

 printf "%s\n" www.google.com www.yahoo.com | cat -n  

und

 for i in www.google.com www.yahoo.com; do echo $i; done | cat -n

welche beide ausgeben:

 1  www.google.com
 2  www.yahoo.com

und das etwas komplexere:

s=(www.google.com www.yahoo.com)
for i in $(seq 1 ${#s[@]}); do
        echo $i ${s[i-1]}
done

das gibt aus:

1 www.google.com
2 www.yahoo.com

In diesem zweiten Vorschlag verwende ich ein Array mit dem Namen s, das mit der Zeile s=(xx yy) erstellt wurde.

Die ${#s[@]} -Syntax ist die Anzahl der Elemente im Array, hier 2 und das ${s[i-1]} ist das Element am Offset i-1 vom Anfang des Arrays, also ${s[1-1]} ist ${s[0]} und dann www.google.com usw.


3
jlliagre