Для цикла в сценарии оболочки - добавить разрыв в CSV-файл - PullRequest
0 голосов
/ 07 марта 2009

Я пытаюсь использовать цикл for в сценарии оболочки.

Я выполняю команду из текстового файла. Я хочу выполнить каждую команду 10 раз и вставить некоторые статистические данные в CSV-файл. После того, как эта команда была выполнена, я хочу начать следующее, НО положить разрыв строки в файле CSV после первой команды, которая была выполнена 10 раз.

Правильно ли следующее:

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

Спасибо всем за помощь

UPDATE

Это делает цикл правильно, но я не могу добавить разрыв строки после того, как каждая команда будет выполнена 10 раз.

Ответы [ 3 ]

2 голосов
/ 07 марта 2009
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 "*"'
0 голосов
/ 07 марта 2009

Как насчет простого добавления строки "echo >> file.csv" после done? Или вы хотите только пустую строку между каждым блоком из 10? Тогда вы можете сделать следующее:

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

В противном случае вы можете привести пример желаемого результата и результата, который вы получаете сейчас.

0 голосов
/ 07 марта 2009

выглядит разумно. Делает ли он то, что вы хотите?

Вы могли бы упростить некоторые вещи, например,

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

может быть просто

DIFF=$((END - START))

если END и START являются целыми числами, и нет необходимости помещать вещи в переменные, если вы собираетесь использовать их только один раз.

Если не делает то, что вы хотите, отредактируйте вопрос, чтобы описать проблему (что вы видите, и что вы бы предпочли, чтобы она сделала).

...