Para Loop en Shell Script - agregue una línea de ruptura en el archivo csv
-
05-07-2019 - |
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.
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).