- 论坛徽章:
- 0
|
文件1:
wav/wanyanbo/near/001.wav [812,4282] [1267,1429] [1819,2027] [2442,2648] [3044,3283] [3688,4024]
wav/wanyanbo/near/002.wav [737,4076] [1160,1312] [1698,1866] [2256,2439] [2838,3158] [3578,3827]
wav/wanyanbo/near/003.wav [758,4510] [1120,1302] [1738,2093] [2473,2838] [3213,3623] [3994,4221]
wav/wanyanbo/near/004.wav [744,4100] [1160,1387] [1776,1996] [2377,2664] [3004,3171] [3564,3885]
wav/wanyanbo/near/005.wav [692,4330] [1105,1353] [1771,1948] [2322,2597] [3040,3371] [3756,4141]
wav/wanyanbo/near/006.wav [743,4358] [1185,1526] [2018,2430] [2815,3023] [3439,3620] [4009,4138]
wav/wanyanbo/near/007.wav [746,4633] [1119,1550] [2042,2356] [2769,3007] [3366,3508] [3922,4403]
wav/wanyanbo/near/008.wav [713,4592] [1093,1528] [1991,2131] [2559,2934] [3317,3723] [4136,4334]
wav/wanyanbo/near/009.wav [768,4706] [1133,1441] [1815,2084] [2479,2901] [3344,3701] [4117,4473]
wav/wanyanbo/near/010.wav [741,4466] [1156,1609] [2048,2216] [2643,2851] [3308,3436] [3870,4107]
文件2(下面的数据只是举例,没有规律):
100
200
300
400
500
600
700
800
900
1000
现要将文件1每一行中第一个方括号[]内的第二个数字减去文件2对应行的数字,并将取得的数字替换掉第一个方括号的第一个数字。例子如下:
文件1第1行第一个方括号:[812,4282] 文件2第1行:100
4282-100=4182
则文件1第一行第一个方括号变为:[4312,4282]
文件1第2行第一个方括号:[737,4076] 文件2第2行:200
4076-200=3876
则文件1第一行第一个方括号变为:[3876,4076]
.
.
.
以此类推
在linux下命令行下可以这样吗 perl findStart.pl file1 file2 > file3 #file3代表替换后得到的新文件- #!/user/bin/perl
- open (IN1, $ARGV[0]); #命令行中在perl文件后输入的第一个参数,代表文件1
- open (IN2, $ARGV[1]); #命令行中在perl文件后输入的第二个参数,代表第文件2
- while ($LINE1 = <IN1>, $LINE2 = <IN2>) #每次读入文件1和文件2中的一行
- {
- chomp ($LINE1); #去掉行末尾的换行符
- chomp ($LINE2);
- @parts1 = split (/\s+/, $LINE1); #以空格为分隔符分割文件1中的一行得到数组
- $temp = $parts1[1];
- $temp =~ s/\[//; #去掉[
- $temp =~ s/\]//;
- @parts2 = split (/,/, $temp); #以,为分割符分割文件1某行第一个方括号内的两个数组
- $num1 = $parts2[1] - $LINE2; #将文件1某行第一个方括号内第二个数字减去文件2对应行的数字
- $NEWLINE = $parts1[0]." [".$num1.",".$parts2[1]."]" ;
- for ($i = 2; $i <= $#parts1; $i++) # $#parts1为数组@parts1最后一个元素的下标
- {
- $NEWLINE = $NEWLINE." ".$parts1[$i];
- }
- print $NEWLINE."/n"; #打印出替换第一个方括号第一个数字后的行
- }
- close (IN2);
- close (IN1);
复制代码 |
|