簡體   English   中英

從多個文件中提取緯度/經度值並輸出到新文件

[英]Extracting Lat/Long values from multiple files and outputs to New File

[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行中接受上面突出顯示的緯度/經度值,並將其導出到兩列文本文件中。

我將如何在perl中做到這一點? 我是Perl的新手,但是如果要遵循某種模板,那將很有幫助。 最好是,我想編寫一個Perl腳本來查找PDE行,計數到第7位和第8位空間,並提取這些值。 我需要在腳本中指定新文件名嗎?

使用perl單線

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/;
}
$ 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

awk

awk '/^PDE/{print $8,$9}' *.mcp

也就是說...在以PDE開頭的所有行上,使用一個或多個空格的默認定界符分隔字段,並打印所有第8和第9個字段,並對所有擴展名為.mcp文件執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM