Per Loop in Shell Script: aggiungi una linea di interruzione nel file CSV
-
05-07-2019 - |
Domanda
Sto cercando di usare un ciclo per
in uno script di shell.
Sto eseguendo un comando da un file di testo. Vorrei eseguire ogni comando 10 volte e inserire alcune statistiche in un file CSV. Dopo che quel comando è stato fatto, voglio iniziare il prossimo MA Mettere un'interruzione di riga nel file CSV dopo il primo comando che è stato eseguito 10 volte.
È il seguente corretto:
#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
}
Grazie a tutti per l'aiuto
UPDATE
Sta eseguendo il ciclo correttamente, ma non riesco a farlo per aggiungere un'interruzione di riga dopo che ogni comando è stato eseguito 10 volte.
Soluzione
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 "*"'
Altri suggerimenti
Che ne dici di aggiungere una riga " echo > > file.csv
" dopo fatto
? O vuoi solo una linea vuota tra ogni blocco di 10? Quindi potresti fare quanto segue:
FIRST=1
processline()
{
if (( FIRST )) then
FIRST = 0
else
echo >> file.csv
fi
...rest of code...
}
Altrimenti potresti voler dare un esempio dell'output desiderato e dell'output che stai ricevendo ora.
Sembra ragionevole. Fa quello che vuoi?
Potresti semplificare alcune cose, ad esempio
DIFF=$(echo "$END - $START" | bc)
potrebbe essere solo
DIFF=$((END - START))
se END e START sono numeri interi e non c'è bisogno di mettere le cose in variabili se le userete solo una volta.
Se non sta facendo quello che vuoi, modifica la domanda per descrivere il problema (cosa lo vedi che fa e cosa preferiresti farlo).