我需要像这样得到两个csv文件的区别
comm -13 <(sort file1.csv) <(sort file2.csv) > file3.csv
这很好但是如何从PHP实现相同的过程,一些提示指出我正确的方向。 (编辑)的
ABC, 12, 1
DEF, 10, 1
GHI, 0, 0
ABC, 8, 1
DEF, 10, 1
GHI, 2, 0
最终的CSV应该是这样的:
ABC, 8, 1
GHI, 2, 0
没有exec()可以使用,那么你如何以高效的方式处理这个问题呢?
我在下面尝试了Marc的解决方案:
<?php
$file1 = file('file1.csv');
$file2 = file('file2.csv');
sort($file1);
sort($file2);
var_dump($file1);
var_dump($file2);
$diff = array_diff($file2, $file1);
var_dump($diff);
?>
返回此
ABC, 8, 1
DEF, 10, 1
GHI, 2, 0
当我手动对它们进行预先排序时,它可以正常工作。然而,当我在应用排序后转储数组时,它们似乎排序了吗?
问题似乎是最后一行没有换行字符。
$file1 = file('file1.csv',FILE_IGNORE_NEW_LINES);
$file2 = file('file2.csv',FILE_IGNORE_NEW_LINES);
FILE_IGNORE_NEW_LINES 似乎解决了这个问题。
因此,如果添加FILE_IGNORE_NEW_LINES,Marc的解决方案会很有效。
答案 0 :(得分:1)
$file1 = file('file1.csv');
$file2 = file('file2.csv');
$sorted1 = sort($file1);
$sorted2 = sort($file2);
/// mangle arrays to remove columns 1,3 here...
$diff = array_diff($mangled1, $mangled2);
file_put_contents('file3.csv', implode($diff));