Для цикла в Shell Script - добавить строку разрыва в CSV-файл

StackOverflow https://stackoverflow.com/questions/621915

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать цикл 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 раз.

Это было полезно?

Решение

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 "*"'

Другие советы

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

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

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

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

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

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

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

DIFF=$((END - START))

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top