我在一个文本文件中有一个信息报告,我想将它们导出为CSV格式,并且仅导出为IPv4格式的那些行(按第一列)。我如何在Perl中做到这一点?
10.10.10.1 10.10.11.11 51251 445 2019-03-05 11:59:29.008 29.156 ......
10.10.10.2 10.10.11.22 51234 123 2019-03-05 11:40:29.008 30.156 .A..SF
2001:288:8900:c400:2018:8ce:1ca8:9cb0 2404:6800:4012:1::200e 62105 443 2019-03-04 23:59:32.458 0.340 17 ...... 0 8 4763 1
2001:288:8001:c200:3171:3abcd:28af:7e8f 2404:6800:4008:c04::bc 50286 443 2019-03-04 23:59:32.471 0.000 6 .A.... 0 1 61 1
Run Code Online (Sandbox Code Playgroud)
我只想获取如下IPv4格式的行,
10.10.10.1 10.10.11.11 51251 445 2019-03-05 11:59:29.008 29.156 ......
10.10.10.2 10.10.11.22 51234 123 2019-03-05 11:40:29.008 30.156 .A..SF
Run Code Online (Sandbox Code Playgroud)
我的代码
open my $fh, '<', 'in.txt';
open my $fo, '>', 'out.csv';
while (<$fh>) {
next if ($. == 1);
s/^\s+//;
my $text = (join ',', (split /\s+/, $_))."\n";
print $fo $text;
}
Run Code Online (Sandbox Code Playgroud)
如何测试第一列是否为IPv4格式?
Regexp :: Common包含您需要的正则表达式:
use feature qw{ say };
use Regexp::Common qw( net );
# ...
my @columns = split;
next unless $columns[0] =~ /$RE{net}{IPv4}/;
say {$fo} join ',', @columns;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |