在当前scripts文件夹下运行perl脚本,实现对../Data文件夹内各地震事件文件夹内哥SAC波形文件, 进行SAC头段变量写入. 从pick.dat中读入第3,5 行作为a,t0, 写入SAC头段. 程序中使用到iddir.dat(地震文件夹及对应的地震ID).
#!/usr/bin/env perl
#作者:刘毅;邮箱:[email protected];日期:2018/10/18;
open(PICK,"<","pick.dat")||die"cannot open the file:$!\n";
open(IDDIR,"<","iddir.dat")||die"cannot open the file:$!\n";
#将pick.dat数组的第1/3/5列分别写入数组id,a,t0;
#(split后lines的长度会变化,不再是行数,而是被split为几份),$id[$i]=@lines[1](注意$i,而不能是i);
$i=0;
while(<PICK>){
@lines=split(" ");
$sta[$i]=@lines[0];
$id[$i]=@lines[1];
$a[$i]=@lines[2];
$t0[$i]=@lines[4];
$i=$i+1;
}
$size=$i;
#将iddir.dat数组的第1/2列分别写入iddir数组的第一列和第二列;
$i=0;
while(<IDDIR>){
@lines2=split(" ");
$iddir[$i][0]=$lines2[0];
$iddir[$i][1]=$lines2[1];
#print"$iddir[$i][0] $iddir[$i][1]\n";
$i=$i+1;
}
$size2=$i;
$iddirr=$iddir[0][1]; #目录
$evid=$iddir[0][0]; #id
$dir="../Data";
chdir $dir;
print "$dir\n";
$st=0;
#遍历pick.dat中每一行;
for($i=0;$i<$size;$i++){
if($evid != $id[$i]){
$node=$i;
$dir="./$iddirr";
chdir $dir;
#在每个地震事件文件夹中遍历.SAC文件
for($j=$st;$j<$node;$j++){
open(SAC, "| sac") or die "Error in opening SAC\n";
print SAC "wild echo off \n";
# print "$sta[$j]\n";
# print "$a[$j],$t0[$j]\n";
print SAC "r *.$sta[$j].* \n";
print SAC "ch a $a[$j] \n";
print SAC "ch t0 $t0[$j] \n";
print SAC "wh \n";
print SAC "q \n";
close(SAC);
}
chdir "..";
$st=$node;
$evid=$id[$i];
for($j=0;$j<$size2;$j++){
if($iddir[$j][0] eq $evid){
$iddirr=$iddir[$j][1];
}
}
}
}