一个小巧且实用的Perl脚本

xiaobu 11天前 38

作为DBA,我们经常要处理一些重复性的任务,譬如批量TRUNCATE一批表。譬如下面的命令:

TRUNCATE tableA;
TRUNCATE tableB;
TRUNCATE tableC;
TRUNCATE tableD;
.....

你很容易发现这些命令的规律,就是除了表的名字不同,其余的部分都是一样的。我们可以把这些表的名字放在一个文本文件中,一行就是一个表的名字,如:

postgres@ip-172-31-24-25:~$ cat tab.list 
tableA
tableB
tableC
tableD

然后我们写一个脚本读取这个文本文件,然后按照自己的需要,再拼凑出其余不变的部分,就很容易产生一个脚本。很多脚本语言都可以使用,但因为Perl是几乎每个Linux机器上的标准配置,所以我给大家推荐一个我写的Perl脚本,其内容如下:

#!/usr/bin/perl
use strict;
use warnings;

if($#ARGV != 0) {
	print "Usage: p.pl filename\n";
	exit;
}

my $filename = $ARGV[0];
open(TXTFILE, '<', $filename) or die "Could not open file '$filename' $!";

my $line;

while(<TXTFILE>) {
	chomp;
	$line = $_;
	$line =~ s/^\s+//;
	$line =~ s/\s+$//;

	print "TRUNCATE $line; -- $line\n";
}

close(TXTFILE);

我们把上述代码保存在一个p.pl文件中,然后执行perl p.pl text_file_name就可以了,示例如下:

postgres@ip-172-31-24-25:~$ perl p.pl tab.list 
TRUNCATE tableA; -- tableA
TRUNCATE tableB; -- tableB
TRUNCATE tableC; -- tableC
TRUNCATE tableD; -- tableD

你可以看到,p.pl读取tab.list文本文件中的内容,逐行读取,然后打印出一个字符串。你所需要做的,就是根据你的需要修改

print "TRUNCATE $line; -- $line\n";

这一行的内容。

最新回复 (0)
返回
发新帖