Usando várias variáveis em um loop for

4

Eu quero usar duas variáveis em um loop for como este (Isto é, por exemplo, eu não vou executar seq como operações)

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

A saída esperada é

  

1 www.google.com.br

     

2 www.yahoo.com

    
por SuperKrish 05.11.2016 / 08:22

3 respostas

8

Se i era apenas um número incrementado com cada string, você poderia tentar um laço para e incrementar i a cada iteração .

Por exemplo:

i=1; for j in 'www.google.com' 'www.yahoo.com'; do echo "$((i++)) $j"; done
    
por Jake 05.11.2016 / 08:39
4

Permite criar variável para apontar para o local do arquivo

FILE="/home/user/myfile"

O conteúdo do arquivo:

www.google.com 
www.yahoo.com

Para obter a saída de:

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

Isso pode ser feito por um dos seguintes métodos abaixo:

Usando a variável de contador:

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

Usando cat -n (numera todas as linhas de saída)

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

Usando array:

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

Se o seu arquivo já tiver números de linha, por exemplo:

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

Faça um loop e divida cada linha para array:

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

Para mais informações:

por Benny 05.11.2016 / 09:23
3

Aqui estão algumas maneiras alternativas, duas curtas e simples:

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

e

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

em que ambas as saídas:

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

e um pouco mais complexo:

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

que gera:

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

Na segunda sugestão, estou usando uma matriz chamada s criada com a linha s=(xx yy)

A sintaxe ${#s[@]} é o número de elementos na matriz, aqui 2 e o ${s[i-1]} é elemento no deslocamento i-1 do início da matriz, portanto ${s[1-1]} é ${s[0]} e, em seguida é www.google.com , etc.

por jlliagre 05.11.2016 / 13:38