什么是这个unix命令的PHP等价物

时间:2012-12-30 15:28:36

标签: php bash unix

我需要像这样得到两个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的解决方案会很有效。

1 个答案:

答案 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));