【发布时间】:2019-11-26 08:06:08
【问题描述】:
我正在从输入文件中读取数据,如果行中有Date,则需要取出整行并进行处理。在我的示例中,Mem-Id 是唯一值,我想创建一个以 Mem-Id 为键的哈希。根据这里的数据是每个字段的等效值
Id -> 1
Mem-Id -> 1
Date & Time (+00:00) -> 2018-07-30T07:40:23
Priority -> LOW
Main Affected objects -> val/s1 val/s0;
Text -> Temperature exceded the limit
这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @data = <DATA> ;
foreach my $data_line ( @data ){
chomp $data_line;
if( $data_line =~ m/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}/){
my ($id, $mem_id, $date_time, $priority, $affected_obj, $text) = split(/\s+/, $data_line);
print "$id, $mem_id, $date_time, $priority, $affected_obj, $text\n";
}
}
__DATA__
.............
.............
.............
========================================================
Id Mem-Id Date & Time (+00:00) Priority Main Affected objects Text
========================================================
1 1 2018-07-30T07:40:23 LOW val/s1 val/s0; Temperature exceded the limit
========================================================
............
............
当我执行上述脚本时,我得到以下错误的输出:
1, 1, 2018-07-30T07:40:23, LOW, val/s1, val/s0;
由于Main Affected objects 的值中有一个空格,因此将其作为单独的值分配给$affected_obj 和$text 变量。
如何在用空格分割数据行时为$affected_obj 和$text 赋值。
Main Affected objects = val/s1 val/s0;
Text = Temperature exceded the limit
【问题讨论】:
-
@zdim
Main Affected objects和Text在其字段值中始终包含空格。 -
又如何分开?
-
@choroba 空格或分号。
-
如果用空格隔开,又包含空格,如何识别边框在哪里?
-
@choroba 我知道
Main Affected objects和Text会用分号(;)隔开。