Для цикла в Shell Script - добавить строку разрыва в CSV-файл
-
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 являются целыми числами, и нет необходимости помещать объекты в переменные, если вы собираетесь использовать их только один раз.
Если он не делает то, что вы хотите, отредактируйте вопрос, чтобы описать проблему (что, по вашему мнению, она делает и что вы бы предпочли, чтобы она сделала).