Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于多列比较两个csv文件并保存在单独的文件中_Php_Unix_Sed_Grep_Gawk - Fatal编程技术网

Php 基于多列比较两个csv文件并保存在单独的文件中

Php 基于多列比较两个csv文件并保存在单独的文件中,php,unix,sed,grep,gawk,Php,Unix,Sed,Grep,Gawk,我有两个格式相同的文件,其中一个有新的更新,另一个有旧的更新。没有特定的唯一id列 如何仅使用unix、PHP、AWK提取新更新的行?您想将所有行与其他行进行字节比较,因此我将执行以下操作: $lines1 = file('file1.txt'); $lines2 = file('file2.txt'); $lookup = array(); foreach($lines1 as $line) { $key = crc32($line); if (!isset($lookup[$ke

我有两个格式相同的文件,其中一个有新的更新,另一个有旧的更新。没有特定的唯一id列


如何仅使用unix、PHP、AWK提取新更新的行?

您想将所有行与其他行进行字节比较,因此我将执行以下操作:

$lines1 = file('file1.txt');
$lines2 = file('file2.txt');

$lookup = array();

foreach($lines1 as $line) {
  $key = crc32($line);
  if (!isset($lookup[$key])) $lookup[$key] = array();
  $lookup[$key][] = $line;
}

foreach($lines2 as $line) {
  $key = crc32($line);

  $found = false;
  if (isset($lookup[$key])) {
    foreach($lookup[$key] as $lookupLine) {
      if (strcmp($lookupLine, $line) == 0) {
        $found = true;
        break;
      }
    }
  }

  // check if not found
  if (!$found) {
    // output to file or do something
  }
}
请注意,如果文件非常大,这将消耗相当多的内存,您需要使用其他一些机制,但想法保持不变