比较程序文件 input.txt 与文件 output.txt

Compare program file input.txt with file output.txt

我有一个文件 input.txt 从命令行传递到 Java 中的数据结构。我的工作是保持结构排序和 return 插入、查找和删除调用的布尔值。 input.txt 是一个包含 50,000 个调用的文件,output.txt 是一个包含 50,000 个预期布尔值的文件。每个测试都是一个新行。我想用一个命令来告诉我有多少个案例我失败了(如果有的话)以及哪些我失败了。我怎样才能做到这一点?

编辑:

所以我被要求包含代码。没有真正的代码。我的程序运行正常,它从 input.txt 文件中输出 50,000 个布尔值作为参数。

我想做的是快速将我的输出与 output.txt 中的给定输出进行比较 所以像

diff javaFile output.txt

更新:对于任何偶然发现这个问题的人,我的教授向我展示了一种使用重定向在 bash 命令中将打印输出放入文件的方法。 格式如下:

java file.java args >fileouts.txt

之后您可以对文件调用 diff。

在 Unix 上:paste --delimiters=, your_output desired_output | grep -iv 'true,true' | grep -iv 'false,false' | wc -l 将为您提供失败测试的计数。

解释:如果文件your_outputdesired_output每行包含truefalse,则paste 将输出 true,truetrue,false 等行,第一个值来自 your_output,第二个值来自 desired_output。接下来,两个 grep 将消除对应于具有相同第一和第二值的通过测试用例的行(因为 -v)。最后,wc -l会统计行数,对应失败的测试用例。

更新: 您可以通过使用此管道来概括这一点:paste --delimiters=, your_output desired_output | grep -Ev '^(.*),$' | wc -l

它将多个 grep 减少到一个寻找任何输出之间的匹配而不仅仅是 truefalse-E 是使用 </code> 所必需的,它指的是括号中正则表达式的第一部分:<code>(.*)^$ 在查找由 , 分隔的两个相同字符串时强制匹配从开头 ^ 到结尾 $ 的整行。