- 论坛徽章:
- 0
|
我有一个文件,名字是name.txt,里面有2列,\t分隔,如下:
AM56-4TS 0508-65
AM56-5TS 0508-66
AM56-6TS 0508-67
AM56-7TS 0508-68
我想通过这个,找到对应的名字,并改成后者,像下面这样,第一列是原始文件,第二类是要改成名字的文件,对应name.txt的第一行。
0508-65__Sg-F_A14050_G04_1405170031Y.ab1 AM56-4TS.ab1
脚本源代码如下:
#!usr/bin/perl -w
use strict;
open FILE, "< name.txt";
my %hash;
while (<FILE>) {
chomp;
my @a = split;
$hash{$a[1]} = $a[0];
}
close FILE;
my $dirname = "ab1-1/";
opendir (DIR,$dirname) || die "Error in opening dir $dirname\n";
while (my $filename = readdir (DIR)){
next unless $filename=~/\.ab1/;
my @b = split/__/,$filename;
if (exists $hash{$b[0]}){
my $newname = "$hash{$b[0]}".".ab1";
rename ( "$dirname/$filename", "$dirname/$newname");
}else{
print "$filename\n";
}
}
close DIR;
print "$total\n";
运行以后,我发现,所有文件名字都被改对了,但是有如下信息输出到屏幕上:
OF07-11.ab1
OF08-6.ab1
OF07-3.ab1
这不正常啊,因为这是更改名字之后的文件,而我想输出的是没改名字的文件,至少也是原来的文件名字。求大神解惑!
|
|