微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java Process Builder - 如何在 Diff

如何解决Java Process Builder - 如何在 Diff

我有一个 Java 进程可以找到 2 个 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"          "10000,x"

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

DATA 1               DATA2
"10000,x"
"10000,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)'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。