For Loop in Shell Script - ajout d'une ligne de séparation dans un fichier csv
-
05-07-2019 - |
Question
J'essaie d'utiliser une boucle pour
dans un script shell.
J'exécute une commande à partir d'un fichier texte. Je souhaite exécuter chaque commande 10 fois et insérer des statistiques dans un fichier CSV. Une fois cette commande effectuée, je souhaite commencer le prochain MAIS mettre un saut de ligne dans le fichier CSV après la première commande effectuée 10 fois.
Les éléments suivants sont-ils corrects:
#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
}
Merci à tous pour toute aide
UPDATE
La boucle est exécutée correctement, mais je ne parviens pas à ajouter un saut de ligne après chaque commande exécutée 10 fois.
La solution
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 "*"'
Autres conseils
Ajoutez simplement une ligne " echo > > fichier.csv
" après terminé
? Ou voulez-vous seulement une ligne vide entre chaque bloc de 10? Ensuite, vous pouvez effectuer les opérations suivantes:
FIRST=1
processline()
{
if (( FIRST )) then
FIRST = 0
else
echo >> file.csv
fi
...rest of code...
}
Sinon, vous voudrez peut-être donner un exemple de la sortie souhaitée et de la sortie que vous obtenez maintenant.
Cela semble raisonnable. Fait-il ce que vous voulez?
Vous pouvez simplifier certaines choses, par exemple.
DIFF=$(echo "$END - $START" | bc)
pourrait être juste
DIFF=$((END - START))
si END et START sont des entiers, il n'est pas nécessaire de mettre des éléments dans les variables si vous ne les utilisez qu'une fois.
Si ne ne fait pas ce que vous voulez, modifiez la question pour décrire le problème (ce que vous voyez et ce que vous préférez que ce soit le cas).