Cプログラムの経過時間の合計を測定しています。そうすることで、私はcプログラム内の行の途中で定義された定数(以下:N)の値をsedで置き換えるシェルスクリプトを実行しています。私は、変数を使用して、それを使用する関数をタイミングする必要があることをあなたが私に言う前により長いマッチの一部だけを短い置換で置き換えてください:
#define N 10 // This constant will be incremented by shell program
は、私は時間に(Nのない再割り当てを意味しない)単一の実行上の外部プログラムの全体の実行を持っています。
私は助けるためにシェルスクリプトで次のように使用してきた:私のINCREMENTINGVAR(交換)があるものは何でもして3桁の数字を置き換え
tmp=$(sed "11s/[0-9][0-9]*/$INCREMENTINGVAR/" myprogram.c); printf "%s" "$tmp" > myprogram.c
。しかし、交換が2桁の場合、これは私のためにはうまく動作しないようです。 Sedは最初の2文字だけを置き換え、前の実行から前の3桁目を削除せずに残します。
TESTS=0
while [ $TESTS -lt 3 ]
do
echo "This is test: $TESTS"
INCREMENTINGVAR=10
while [ "$INCREMENTINGVAR" -lt 10 ]
do
tmp=$(sed "11s/[0-9][0-9]*/$INCREMENTINGVAR/" myprogram.c); printf "%s" "$tmp" > myprogram.c
rm -f myprog.c.bak
echo "$INCREMENTINGVAR"
gcc myprogram.c -o myprogram.out; ./myprogram.out
INCREMENTINGVAR=$((INCREMENTINGVAR+5))
done
TESTS=$((TESTS+1))
done
代わりに何かする必要がありますか?
編集:全体シェルスクリプトを追加。 sedのパターンが変更されました。
'-i'オプションを使うと、元のファイルに出力を書き戻すことができるので、変数は必要ありません。 – Barmar
あなたのコードは、3桁の数字がある場合にのみ置き換えられます。あなたの入力ファイルは2桁しかありません。だから、何かを置き換えるべきではありません。 3桁目がなかったので、前の3桁目を離れると言っても分かりません。 – Barmar
あなたが4桁の数字を持っているなら、それは最初の3を置き換えますが、4番目の数字を残します。 – Barmar