删除包含另一个文件中不存在的数据的文件行

时间:2014-05-16 21:13:59

标签: java performance algorithm unix

我有一个Hier.csv文件,看起来像这样(数千行):

value;nettingNodeData;ADM59505_10851487;CVAEngine;ADM;;USD;0.4;35661;BDR;NA;ICE;;RDC;MAS35661_10851487;CVAEngine;MA;10851487;RDC

我有另一个,Price.csv,看起来像这样:

value;nettingNodePrices;ADM68834_22035364;CVAEngine;CVA with FTD;EUR;1468.91334249291905;DVA with FTD;EUR;5365.59742483701497

我必须确保两个文件具有相同数量的行和相同的ID(每行的第三个值),并且已知的事实是来自Hier.csv的ID集更大并且包含来自Price.csv的一组id,即。 Hier.csv中的一些ID不在Price.csv中。 此外,两个文件中都没有重复项。

到目前为止,我已经尝试了以下内容,但它已经用了很长时间,而且没有工作(我可以用我的小手和Excel更快地完成它,但那不是我想要的)。< / p>

这是我的伪代码程序,因为我现在无法访问我的代码,我会尽快编辑这个问题:

for each line of Hier.csv
    for each line of Prices.csv
        if prices.line doesn't contain the 3rd value of hier.line
            store that value in a list
        end
    end
end

Process p;
for each value in the list
    // remove the line containing that value from Hier.csv
    String[] command1 = {"sed", "'/^.*" + value + ".*$/d'", "Hier.csv", ">", "tmp.csv"};
    Process p = Runtime.getRuntime().exec(command1)
end
String[] command2 = {"mv", "tmp.csv" "Hier.csv"};
Process p = Runtime.getRuntime().exec(command2)

有没有比双循环更好的方法? 为什么最后一部分(exec(命令))有效? 最后,在读取csv文件时更有效:BufferedReader或Scanner?

1 个答案:

答案 0 :(得分:1)

您可以使用合并或哈希表。 合并: 排序两个文件并合并在一起 哈希表: 将较小的文件(ids)加载到哈希表,循环访问更大的文件并根据哈希表测试存在