[Users:~/Desktop/cross_correlated]$cat 20131102.18582702.mcp
MCCC processed: unknown event at: Thu, 16 Oct 2014 11:09:42 CST
station, mccc delay, std, cc coeff, cc std, pol , t0_times , delay_times
ZJ.sta1 -0.0374 0.0015 0.9851 0.0098 0 APRL.BHZ 301.7639 -0.1217
ZJ.sta2 -0.0545 0.0015 0.9907 0.0101 0 BEBP.BHZ 301.9218 -0.2967
ZJ.sta3 0.4622 0.0015 0.9724 0.0126 0 CASY.BHZ 301.6886 0.4533
ZJ.sta4 0.2697 0.0081 0.9819 0.0146 0 DONT.BHZ 300.7176 1.2318
ZJ.sta5 -0.3824 0.0058 0.9805 0.0160 0 DUBY.BHZ 302.1706 -0.8733
ZJ.sta6 0.2499 0.0015 0.9873 0.0139 0 FOOT.BHZ 302.1762 -0.2467
ZJ.sta7 -0.5377 0.0015 0.9813 0.0132 0 GRAW.BHZ 301.8386 -0.6967
ZJ.sta8 -0.5245 0.0015 0.9546 0.0118 0 KNYN.BHZ 302.2768 -1.1217
ZJ.sta9 0.6591 0.0081 0.9875 0.0089 0 LEON.BHZ 302.0388 0.3000
ZJ.staa 0.4446 0.0015 0.9878 0.0089 0 MICH.BHZ 301.5210 0.6033
ZJ.RAPH 0.3358 0.0015 0.9891 0.0121 0 RAPH.BHZ 301.4371 0.5783
ZJ.RKST -0.5451 0.0015 0.9886 0.0123 0 RKST.BHZ 301.5813 -0.4467
ZJ.xzzz -0.6739 0.0058 0.9912 0.0100 0 SAMH.BHZ 301.9008 -0.8950
ZJ.xyzz 0.2476 0.0015 0.9898 0.0098 0 SHRD.BHZ 302.2989 -0.3717
ZJ.xzzz 0.0866 0.0015 0.9862 0.0114 0 SPLN.BHZ 301.7630 0.0033
Mean_arrival_time: 301.6797
No weighting of equations.
Window: 3.12 Inset: 1.43 Shift: 0.25
Variance: 0.00373 Coefficient: 0.98360 Sample rate: 40.000
Taper: 0.39
Phase: P
PDE 2013 11 2 18 58 27.02 **-19.171 -172.641** 10.1 0.0 6.2
我在一个目录中有多个文件,其格式如上所示。 我需要创建一个脚本,该脚本在PDE行中为每个文件获取我在上面突出显示的Lat / Long值,并将它们导出到两列文本文件中。
我如何在perl中执行此操作?我是Perl的新手,但是如果有一种模板要遵循,那将会很有帮助。最好,我想编写一个查找PDE行的perl脚本,计算到第7和第8个空格,然后提取这些值。我是否需要在脚本中指定新文件名?
答案 0 :(得分:2)
使用perl one-liner
perl -lane 'print "@F[7,8]" if /^PDE/' 20131102.18582702.mcp
切换:
-l
:启用行结束处理-a
:拆分空间线并将其加载到数组@F
-n
:为输入文件中的每个“行”创建一个while(<>){...}
循环。 -e
:告诉perl
在命令行上执行代码。 要使用脚本,以下内容将创建等效逻辑。
注意:如果要处理多个文件,可以使用注释掉的行:
#!/usr/bin/env perl
use strict;
use warnings;
@ARGV = ('20131102.18582702.mcp');
# @ARGV = glob('*.mcp');
while (<>) {
chomp;
my @F = split ' ';
print "@F[7,8]\n" if /^PDE/;
}
答案 1 :(得分:0)
$ perl -l -n -a -e '$F[0] eq "PDE" && print $F[7], "\t", $F[8]' *.mcp
使用awk
可能更简单:
$ awk -v OFS='\t' '$1 == "PDE" { print $8, $9 }' *.mcp
答案 2 :(得分:0)
使用awk
awk '/^PDE/{print $8,$9}' *.mcp
在所有以PDE
开头的行上显示...,打印第8和第9个字段,使用一个或多个空格的默认分隔符来分隔字段,并为具有扩展名的所有文件执行此操作.mcp
。