Pregunta

Estoy tratando de usar un bucle for en un script de shell.

Estoy ejecutando un comando desde un archivo de texto. Deseo ejecutar cada comando 10 veces e insertar algunas estadísticas en un archivo csv. Después de que se haya realizado ese comando, quiero comenzar el siguiente PERO colocar un salto de línea en el archivo CSV después del primer comando que se realizó 10 veces.

¿Es correcto lo siguiente?

#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
}

Gracias a todos por cualquier ayuda

ACTUALIZACIÓN

Está haciendo el bucle correctamente, pero no puedo agregar un salto de línea después de que cada comando se ejecute 10 veces.

¿Fue útil?

Solución

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 "*"'

Otros consejos

¿Qué tal si solo agregas una línea " echo > > file.csv " después de done ? ¿O solo quieres una línea vacía entre cada bloque de 10? Entonces podría hacer lo siguiente:

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

De lo contrario, es posible que desee dar un ejemplo de la salida deseada y la salida que está obteniendo ahora.

Parece razonable. ¿Hace lo que tú quieres?

Podrías simplificar algunas cosas, por ejemplo,

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

podría ser justo

DIFF=$((END - START))

si END y START son enteros, y no hay necesidad de poner cosas en variables si solo las vas a usar una vez.

Si no está haciendo lo que quiere, edite la pregunta para describir el problema (lo que ve que está haciendo y lo que prefiere que haga).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top