1

我需要编写一个脚本来交错两个不同文件的内容。例如,执行 './inter2files file1 file2' 会给我:

文件 1 线 1 文件 2
* 线 1 文件 1 线
2 文件 2 * 线
2

我到目前为止的代码是:

exec 30< file1
exec 40< file2
read line1 <& 30 
read line2 <& 40
echo $line1 
echo $line2
4

3 回答 3

3

你可以这样做paste

paste -d "\n" file1 file2 > output_file
于 2012-11-15T21:36:43.073 回答
0

用 Perl 脚本解决了这个问题

#!/usr/bin/perl

do { open($fh[$_], "<$ARGV[$_]") or die("'$ARGV[$_]' does not exist") } for (0..$#ARGV);

for ($i=0;;$i++) {
    $j=$#ARGV+1;

    $fh = $fh[$i%$j];
    if ( $_ = <$fh> ) {
            print $_;
    } else {
            $end |= 2**($i%$j);
    }

    if($end == (2**($j))-1) {
            last;
    }
}

close($_) for(@fh);
于 2012-11-29T18:33:14.023 回答
0
declare -a f1=(`cat file1`)
declare -a f2=(`cat file2`)
count=`echo ${#f1[@]}` # Number of elements in the array
#### assuming the line counts are the same between file1 and file2
i=0
while [ ${i} -le ${count} ]
do
  echo ${f1[${i}]}"   "${f2[${i}]}
  (( i=${i}+1 ))
done

由于数组声明使用内存空间,如果您的文件很大,这可能会导致您出现不可预知的行为,但如果您一次只处理几百行有价值的文件,这种方法应该有效。

于 2012-11-15T22:00:41.137 回答