我有这行代码来分割文本文件中的空格:
my @line_splits = split /\s+/, $ine;
Run Code Online (Sandbox Code Playgroud)
这是文本文件的一些内容:
1 2016-09-27 14:07:20.084877
2 2016-09-27 14:07:20.084998
3 2016-09-27 14:07:20.131343
4 2016-09-27 14:07:20.131374
6 2016-09-27 14:07:20.137359
7 2016-09-27 14:07:20.137556
8 2016-09-27 14:07:20.137796
9 2016-09-27 14:07:20.437769
10 2016-09-27 14:07:20.437796
100 2016-09-27 14:07:23.293661
Run Code Online (Sandbox Code Playgroud)
我的目标是获取日期和时间(我知道在$ line_splits [1]和$ line_splits [2]).
但是当我运行我的perl脚本时,从1到99的行是错误的,而在100和以上我已经得到了我想要的东西.
Time Stamp: 98 2016-09-27 --> line 98
Time Stamp: 99 2016-09-27 --> line 99
Time Stamp: 2016-09-27 14:07:23.293661 --> line 100
Time Stamp: 2016-09-27 14:07:23.299406 --> line 101
Time Stamp: 2016-09-27 14:07:23.299437 --> line 102
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,正则表达式有什么问题,还是有其他方法可以做到这一点?
我不知道它是否已经在这里重复,但任何帮助将非常感谢.
谢谢 :)
哇,很多复杂的答案,但解决方案真的很容易.
只使用split没有/\s+/正则表达式.
该默认行为 -或者如果你只是指定你' '分裂-是,它忽略前导空格.但/\s+/事实并非如此.
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
while ( <DATA> ) {
chomp;
my @fields = split;
print $fields[2],"\n"
}
__DATA__
1 2016-09-27 14:07:20.084877
2 2016-09-27 14:07:20.084998
3 2016-09-27 14:07:20.131343
4 2016-09-27 14:07:20.131374
6 2016-09-27 14:07:20.137359
7 2016-09-27 14:07:20.137556
8 2016-09-27 14:07:20.137796
9 2016-09-27 14:07:20.437769
10 2016-09-27 14:07:20.437796
100 2016-09-27 14:07:23.293661
Run Code Online (Sandbox Code Playgroud)