perl在IC领域应用—复制多行通配符替换为数字
Posted IC验证技术圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl在IC领域应用—复制多行通配符替换为数字相关的知识,希望对你有一定的参考价值。
perl特点
perl非常难以看懂,但是非常好用,对于文字处理,perl考虑的是用起来方便,写的时候有千奇百怪的写法,比较难以阅读,并且perl中很多东西都是用处不大的,使用perl的套路一般都模板化。
最常用模式
1,打开文件,一个循环读取文件
2,查找,找到替换,提取有用的数据等等
3,写入一个新文件中
应用实例
执行说明
脚本功能为将下面的一行中数据拷贝N行,并将通配符$换成0到N的数字,下面的一行数据放在文件temp.txt中
5'd$: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*$+0*2 +: 2];
#上面的$是通配符,将$换成数字,复制2400份。
在命令行下执行:perl auto_copy.pl temp.txt 2400
其中 auto_copy.pl为perl脚本程序文件名,2400为拷贝次数,执行完部分结果如下
5'd$: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*$+0*2 +: 2];
#上面的$是通配符,将$换成数字,复制2400份。
5'd0: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*0+0*2 +: 2];
5'd1: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*1+0*2 +: 2];
5'd2: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*2+0*2 +: 2];
5'd3: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*3+0*2 +: 2];
5'd4: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*4+0*2 +: 2];
5'd5: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*5+0*2 +: 2];
5'd6: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*6+0*2 +: 2];
5'd7: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*7+0*2 +: 2];
5'd8: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*8+0*2 +: 2];
5'd9: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*9+0*2 +: 2];
程序说明
#!/usr/bin/perl
##开启警告功能
use warnings;
##第一行是解释器的路径,必须得那么写,如果第一行是注释或者其他的话,在执行的时候需要特殊处理
##在linux里面写完只是一个文档 ,要想执行必须使用:chmod +x ***.pl 此时文件才能可执行
## stepheng.20150804, auto copy a file many times,and replace $ to number.
## Uasge: auto_copy.pl filename xxx num sign
## for example: auto_copy.pl temp.txt 2400
## then in each line, $ will be replace by a number. First is 0 ,then 1,......
## this file will copy 2400 times, Untill 2399.
#perl 支持命令行传参数
#@array 数组,使用数组中的元素则$array[2]
$src_file = $ARGV[0]; #命令行的第一个参数,即temp.txt
$times = $ARGV[1]; #命令行第二个参数,即次数2400
#打开文件,文件句柄放在SRCFILE中,perl中使用的变量不声明就可以直接使用的,
open(SRCFILE, $src_file) || die ("ERROR:Could not open file $src_file ! \n");
#文件auto_replace_number.txt为最终输出的文件,unlink 如果目录中存在该文件,则删除
unlink "auto_replace_number.txt";
#打开一个名为auto_replace_number.txt文件,文件句柄赋给OUTFILE,
#">>"表示追加写,即挨着原有内容的末尾写,
#“>”表示从开头写,不管文件里面是否有文件,都从开头替换写,
open(OUTFILE, ">> auto_replace_number.txt") || die ("ERROR:Could not open file $src_file ! \n");
#无必要声明
$num = 0;
for ($num=0; $num < $times; $num++){
#屏幕打印提示信息
print "Do the $num th replace....\n";
#执行完关闭,也可以放在for循环的最后
close SRCFILE;
open (SRCFILE, $src_file);
#读入一行,while($line = <SRCFILE>)为将文件SRCFILE按行进行读取,
#$line的内容就是文件里面的一行
#每循环一次,读取一行,<>保证了每次只读取一行,读到末尾为空,while循环退出
while($line = <SRCFILE>){
#把换行结尾的换行符给去掉,因为$line打印的时候就是以换行结束的,如果不去,就会有两个换行符
chomp($line);
$line =~ s/\$/$num/g; #\$就是代表$(\转义字符),g是全局的意思,
#全部替换,否则只替换一个,替换完的结果再赋值给$line
#写入的时候是带换行符的,
print OUTFILE "$line \n";
}
#print OUTFILE "\n";
}
#关闭句柄
close SRCFILE;
close OUTFILE;
以上是关于perl在IC领域应用—复制多行通配符替换为数字的主要内容,如果未能解决你的问题,请参考以下文章