这个unix命令的php等效是什么?


What would be the php equivalent of this unix command

我需要得到两个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(),那么如何在PHP中有效地处理这个问题呢?

我尝试了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的解决方案效果很好。

$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));