1

2つの異なるファイルのコンテンツをインターリーブするスクリプトを作成する必要があります。たとえば、'./inter2files file1 file2'を実行すると、次のようになります。

file1-line1
file2 * line1
file1-line2
file2 * line2

私がこれまでに持っているコードは次のとおりです。

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
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 に答える
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 に答える