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.

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top