Shell: como usar 2 variáveis com condição

2

Por favor me ajude a usar 2 variáveis com condição. Por exemplo,

cat days
01072017
02072017
03072017

cat hours
00:00
01:00
02:00
03:00

meu exemplo de script de shell

 for i in 'cat days' & j in 'cat hours'
    do
    cat file | grep $i $j >data-$i-$j
    done

Eu quero uma saída de 3 dias * 4 horas = 12 arquivos redirecionados com data-dia-hora correspondente por favor ajude.

    
por RNL 10.07.2017 / 13:02

3 respostas

0

Você precisa usar um loop aninhado

   for i in 'cat days' 
      do 
        for j in 'cat hours'
        do
        cat file | grep  "$i $j"  >data-${i}-${j}
      done
    done
    
por 10.07.2017 / 13:28
3

A solução padrão para tal problema é fazer dois loops:

for i in $(<days); do
     for j in $(<hours); do
           grep "$i $j" file > data-"$i-$j"
     done
done

Observe que eu mudei os backticks para $() para substituição de comandos, eliminei gatos mortos e adicionei aspas duplas.

    
por 10.07.2017 / 13:23
1

Você pode usar este comando one-liner para executar multiloop, por exemplo, você tem que reiniciar o serviço em diferentes hosts com diferentes parâmetros de serviço "i" é para identificação de host e "j" é para o parâmetro de nome de serviço

for i in 1 2 3 4;do  ssh host$i 'for j in A B C D; do sudo systemctl restart service_$j; done'; done

Observação: você deve alterar os valores de "i" e "j" para seus requisitos

    
por 06.11.2018 / 16:06