“用于Perl的if语句过滤器”

时间:2019-07-19 17:49:57

标签: perl

我正在使用Perl在大文件中搜索特定的纬度/经度数据。 但我只希望Lat / Long数据属于它前面的包含“ GT017”的数据

我已成功获取以下数据类型 呼号 纬度 长 时间戳

但是,我似乎不能仅将获取的数据限制为与呼叫符号GT017关联的纬度/经度/时间戳记

我已经尝试过if语句和子例程,但似乎都不允许我只打印与呼叫符号GT017关联的Lat / Long / timestamp

use strict;

#search for headers
my $find1= "GT017   ";
my $find2 = "timeStamp";
my $find3 = "latDD";
my $find4= "lonDD";

#above provides in response to my $find

#"callsign":"GT017   "
#"latDD":33.733200,
#"lonDD":-84.475667,
#"timeStamp":"2019-07-19T13:46:57.8Z",


open (NEW1, ">", "new1.txt" ) or die "could not open:$!";
open (FILE, "<", "test revab.txt") or die "could not open:$!";
while (<FILE>) {

#I want only a specific callsign's lat/long/timestamp printed

if ($find1 =~ /GT017/) {

print NEW1 if (/$find1/);
print NEW1 if (/$find2/);
print NEW1 if (/$find3/);
print NEW1 if (/$find4/);

}

}
close (FILE);
close (NEW1);

我从原始文件中获取了每个纬度/经度/时间戳的大文件。

"latDD":33.733200,
"lonDD":-84.474266,
"timeStamp":"2019-07-19T13:46:58.22Z",
"latDD":33.733200,
"lonDD":-84.474266,
"timeStamp":"2019-07-19T13:46:58.8Z",
"latDD":33.708528,
"lonDD":-84.388506,
"timeStamp":"2019-07-19T13:46:58.33Z",

下面是我希望每次出现的“呼号”:“ GT017”,

"callsign":"GT017   ",
"timeStamp":"2019-07-19T13:47:50.0Z",
"latDD":33.781071,
"lonDD":-84.401736,

1 个答案:

答案 0 :(得分:0)

这里是一个例子:

my $find = '"callsign":"GT017   "';
while (<FILE>) {
    if (/\Q$find\E/) {
        print NEW1 $_;
        for (1..3) {
            print NEW1 scalar <FILE>;
        }
    }
}

这将打印带有呼号的行和以下3行。