質問

シェルスクリプトで 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が整数であり、一度だけ使用する場合は、変数に値を入力する必要はありません。

望んでいることを していない場合は、質問を編集して問題を説明します(実際に見ていることと、むしろさせたいこと)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top