Bash 命令/脚本来比较所有 mytestN.out 和 testN.out

Bash 命令/脚本来比较所有 mytestN.out 和 testN.out

我有一个可执行文件,我将使用所有输入文件进行测试并生成相应数量的输出文件(我可以完成这部分)。然后,我将比较新创建的文件(名为 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。

相关内容