mytestN.outとtestN.outの両方を比較するBashコマンド/スクリプト

mytestN.outとtestN.outの両方を比較するBashコマンド/スクリプト

すべての入力ファイルをテストし、その数の出力ファイルを生成する実行可能ファイルがあります(この部分は私がすることができます)。次に、新しく作成されたファイル(mytestN.out)を正しい出力(testN.out)を持つファイルと比較し、それをdifftestN.txtというファイルにパイプします。次に、各difftest.txtをチェックし、空の場合は「成功」を印刷し、それ以外の場合は「差分検出」を印刷します。

例えば、私はします

./Executable < test1.in > mytest1.out

N test.inの場合。私はこれを使ってこれが可能であることを知りました。

for f in test*.in; do ./tetris <"$f" >"my${f%in}svg"; done

次に、すべてのmytest.outとすべてのtest.outに対してdiffコマンドを実行します。

diff mytest1.out test1.out > difftest1.txt

すべてのtestNに対してこれを行う方法がわかりません。私はこれが正しいアプローチだと思います。

for f in mytest*.svg; do diff "$f" "###what goes here?###" > "diff${f%in}txt"; done

しかし、「$ f」の後に何が起こるのかわからず、違いはdiffmytestN.txtに渡されますが、difftestN.txtが欲しいです。

その後、各difftest.txtをチェックし、空の場合は「成功」を印刷し、空でない場合は「差分発見」を印刷したいと思います。

答え1

記載されているファイルの数に関係なく、これを調整できます。以下は、私が使用した4つのテストファイルの内容です:test1:1 mytest1:1 test2:2 mytest2:2

for i in {1..2}; do 
    diff test${i}.out mytest${i}.out &>/dev/null
    es=$?
    if [ $es -ne 0 ]; then 
        echo "difference found"
    else 
        echo "success"
    fi
done

出力:

difference found
success

あなたはdiff出力ファイルを保存するように頼んだので、あなたの質問に文字通り答えなかったことを知っています。必ずこれを行う必要がある場合は、コードを変更できます。

  diff test${i}.out mytest${i}.out > difftest${i}.txt

  if ! [[ -s difftest${i} ]]; then 
      echo success
  else
      echo "difference found"
  fi

プログラムが内容のあるファイルを存在しないファイルと比較しようとすると、ファイルと存在しないファイル文書の間にかなりの違いがあるように見えるstderr出力を生成することを覚えておくと便利です。 。 stdoutだけが*.txtに入るので大丈夫です。

関連情報