我需要编写一个脚本来交错两个不同文件的内容。例如,执行 './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
你可以这样做paste
:
paste -d "\n" file1 file2 > output_file
用 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);
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
由于数组声明使用内存空间,如果您的文件很大,这可能会导致您出现不可预知的行为,但如果您一次只处理几百行有价值的文件,这种方法应该有效。