将程序文件input.txt与文件output.txt进行比较

时间:2015-03-01 07:05:08

标签: java bash file diff readline

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

编辑:

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

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

这样的东西
diff javaFile output.txt

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

java file.java args >fileouts.txt

之后你可以在文件上调用diff。

1 个答案:

答案 0 :(得分:3)

在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 '^(.*),\1$' | wc -l

它将多个grep减少到一个查找任何输出(不仅仅是truefalse)之间匹配的值。使用-E \1是必要的,(.*)引用括号中正则表达式的第一部分:^。在查找由$分隔的两个相同字符串时,^$会强制从,开始到结束{{1}}的整行。