Pergunta

Estou tentando usar um for Loop em um script de shell.

Estou executando um comando de um arquivo de texto. Desejo executar cada comando 10 vezes e inserir algumas estatísticas em um arquivo CSV. Depois que esse comando foi feito, quero iniciar o próximo, mas colocar uma quebra de linha no arquivo CSV após o primeiro comando que foi feito 10 vezes.

É o seguinte correto:

#Function processLine
processLine(){
line="$@"
for i in 1 2 3 4 5 6 7 8 9 10
do
START=$(date +%s.%N)
echo "$line"
eval $line > /dev/null 2>&1

END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)

echo "$line, $START, $END, $DIFF" >> file.csv 2>&1
echo "It took $DIFF seconds"
echo $line
done
}

Obrigado a todos por qualquer ajuda

ATUALIZAR

Ele está fazendo o loop corretamente, mas não consigo adicionar uma quebra de linha após a execução de cada comando 10 vezes.

Foi útil?

Solução

processLine()
{
    line="$@"

    echo $line >> test_file
    for ((i = 1; i <= 10 ; i++))
    do
        # do not move to the next line
        echo -n "$i," >> test_file
    done

    # move to the next line: add the break
    echo >> test_file
}

echo -n > test_file

processLine 'ls'
processLine 'find . -name "*"'

Outras dicas

Que tal apenas adicionar uma linha "echo >> file.csv" depois done? Ou você quer apenas uma linha vazia entre cada bloco de 10? Então você pode fazer o seguinte:

FIRST=1
processline()
{
  if (( FIRST )) then
    FIRST = 0
  else
    echo >> file.csv
  fi
  ...rest of code...
}

Caso contrário, você pode dar um exemplo da saída desejada e da saída que você está obtendo agora.

Parece razoável. Isso faz o que você quer?

Você pode simplificar algumas coisas, por exemplo

DIFF=$(echo "$END - $START" | bc)

poderia ser apenas

DIFF=$((END - START))

Se o fim e o início são inteiros, e não há necessidade de colocar as coisas em variáveis, se você apenas as usar uma vez.

Se é não Fazendo o que quiser, edite a pergunta para descrever o problema (o que você o vê fazendo e o que prefere fazer).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top