Java Process Builder语言 - How to Sort 2 files before Diff



我有一个Java进程,它可以找到两个CSV之间的差异。它返回已添加/更改/删除的行。

代码的主要部分如下:

ProcessBuilder pb = new ProcessBuilder("/usr/bin/diff", file1.toString(), file2.toString());
Process process;

try
{
process = pb.start();
}
...

问题是,如果文件没有事先排序,diff逻辑将不准确。为了说明这一点,假设我有以下2个数据集:

DATA 1               DATA2
"10000,x,x"          "10000,y,y"
"10000,y,y"          "10000,x,x"

这些列表是相同的,但顺序不同。因此,我当前的逻辑会认为ID为10000的行已更改。应用差异的正确方法是在排序后的数据上,比如…

DATA 1               DATA2
"10000,x,x"          "10000,x,x"
"10000,y,y"          "10000,y,y"

我的问题是,什么是Java中的有效实现,它等效于以下内容。。。

diff -> sort(file1) sort(file2)

似乎有一个相对简单的bash解决方案。。。

String cmd = "diff <(sort " + file1.toString() + ") <(sort " + file2.toString() + ")";
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", cmd);

更清楚地说,它相当于。。。

bash -c 'diff <(sort text2) <(sort text1)'

最新更新