您逐行读取这两个文件并通过正则表达式提取行标记。提取的标记存储在关联数组中,使用第一个标记作为键。在第二步中,您可以遍历所有可用键并从存储在数组中的值构造输出行。
php 中的示例实现,仅用于演示目的。因此没有进行错误检查,并且模式可能必须适应您的需求。显然,在所有其他语言中也可以这样做。我只是选择了 php,因为它很容易阅读:
<?php
$input_file[1]=fopen('/path/input1.list','r');
$input_file[2]=fopen('/path/input2.list','r');
# read input files line by line
foreach ($input_file as $input){
while (!feof($input)){
$tokens=array();
preg_match('/^(ID[0-9]+) (.+)$/',trim(fread($input)),$tokens);
$list[$i][$tokens[1]]=$tokens[2];
}
}
# construct output lines:
$output_file=fopen('/path/output.list','w');
foreach ($list[1] as $key=>$val){
$line=sprintf("%s %s%s\n", $key, $val,
array_key_exists($key,$list[2])?' '.$list[2][$key]:'' );
fwrite($output_file,$line);
}
# some house keeping
fclose($input_file[1]);
fclose($input_file[2]);
fclose($output_file);
?>
(请注意,我没有检查这个,我只是把这个写下来。它是一个起点,而不是即用型)