用perl实现两个文本文件交叉合并

来源:互联网 发布:程序员高清logo 编辑:程序博客网 时间:2024/06/15 02:14

  perl语言被某些爱好者称作“Unix 中的王牌工具”。确实,和C/C++相比,Perl语言特别是在处理文本和文件方面,有一些独到的优势,在处理某些文本文件任务时,真的是很方便的。

  比如下面这个问题:

  现在两个文本文件a.txt和b.txt,内容如下:

a.txt:
a
b
c
d
e
f
g

b.txt:
1
2
3
4
5
6
7
  我怎样能生成一个新文件(c.txt),内容如下:
c.txt:
a
1
b
2
c
3
d
4
e
5
f
6
g
7

  简单说就是要完成两个文本文件的交叉合并。

      如果想用C/C++实现,实现应该是比较复杂的,需要使用不少字符串处理函数,以及文件指针操作,所以我个人认为还是比较复杂的。
  如果想比较简单地解决这种问题,就需要找到一种“处理字符串和文本方面比较有优势”的语言,在这方面,被称为“软件芯片”的perl语言就属于其中之一,只需要知道它怎么控制文件句柄,就能个比较简单地实现了,不多说了,直接看实现代码:


#! /usr/bin/perl -w #本地的perl编译器路径
use strict; #开启语法检测
use 5.010; #使用5.10版本

my $name_1 = $ARGV[0];
my $name_2 = $ARGV[1]; #得到命令行参数

#open the ori perlterm script
open TXT_1, "<$name_1";
open TXT_2, "<$name_2"; #得到两个文件句柄

my @a = <TXT_1>;
my @b = <TXT_2>; #得到两个文件内容

my $line_b = @b; #b.txt文件内容传递
my $count_line = 0; #初始化文件行数

open my $newfile, ">", "c.txt"; #创建升成的新文件和句柄

foreach (@a){ #循环开始交叉合并
chomp;
print $newfile "$_\n";
if ($count_line <= $line_b){
print $newfile "$b[$count_line]\n";
$count_line+=1;
}
}

close $newfile or warn "can not close the file";#合并结束,关闭

  保存为merge.pl并退出,这样就OK啦!运行结果如下:
a.txt:
a
b
c
d
e
f
g

b.txt:
1
2
3
4
5
6
7

c.txt:
a
1

b
2

c
3

d
4

e
5

f
6

g
7

  不到30行,就搞定了。

0 0
原创粉丝点击