Java Process Builder - 如何在 Diff 之前对 2 个文件进行排序
Java Process Builder - How to Sort 2 files before Diff
我有一个 Java 过程可以找到 2 个 CSV 之间的差异。它 returns 行 added/changed/deleted。
代码的主要部分如下:
ProcessBuilder pb = new ProcessBuilder("/usr/bin/diff", file1.toString(), file2.toString());
Process process;
try
{
process = pb.start();
}
...
问题是,如果文件没有事先排序,差异逻辑将不准确。为了说明,假设我有以下 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)'
我有一个 Java 过程可以找到 2 个 CSV 之间的差异。它 returns 行 added/changed/deleted。
代码的主要部分如下:
ProcessBuilder pb = new ProcessBuilder("/usr/bin/diff", file1.toString(), file2.toString());
Process process;
try
{
process = pb.start();
}
...
问题是,如果文件没有事先排序,差异逻辑将不准确。为了说明,假设我有以下 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)'