シェルスクリプトのループ-csvファイルに改行を追加
-
05-07-2019 - |
質問
シェルスクリプトで for
ループを使用しようとしています。
テキストファイルからコマンドを実行しています。各コマンドを10回実行し、いくつかの統計をcsvファイルに挿入したいと思います。そのコマンドが実行された後、次のコマンドを開始しますが、10回実行された最初のコマンドの後にCSVファイルに改行を入れます。
次は正しいですか:
#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
}
ご協力ありがとうございます
更新
ループは正しく実行されていますが、各コマンドが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 "*"'
他のヒント
行を追加するだけの方法&quot; echo&gt;&gt; file.csv
&quot; done
の後?または、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が整数であり、一度だけ使用する場合は、変数に値を入力する必要はありません。
望んでいることを していない場合は、質問を編集して問題を説明します(実際に見ていることと、むしろさせたいこと)。
所属していません StackOverflow