-2

我有一个列出日期的数据文件。日期的格式为 m/d/yyyy。一个例子如下所示:

1/1/2011
1/10/2011
10/1/2011
10/10/2011

我的问题是,如何提取月份和日期,以便将其存储在两个单独列中的不同文件中?例如,我想显示为

Month  Day
1       1
1       10
10      1
10      10
4

5 回答 5

1

my ($Day, $Month, $Year) = split(m{/}, $Line);

于 2013-10-09T19:50:40.117 回答
0

使用perl

perl -pe 's#(\d+)/(\d+)/\d+#$1\t$2#' file > new_file

使用sed

sed -r 's#([0-9]+)/([0-9]+)/[0-9]+#\1\t\2#' file > new_file
于 2013-10-09T19:46:24.333 回答
0

我相信,split使用正则表达式从字符串中提取所有数字字段而不是使用 is 是最清晰的

my ($m, $d, $y) = $date =~ /\d+/g;

这是一个展示这个想法的完整程序。

use strict;
use warnings;

my @dates = qw<
  1/1/2011
  1/10/2011
  10/1/2011
  10/10/2011
>;

print "Month  Day\n";

for (@dates) {
  my ($m, $d, $y) = /\d+/g;
  printf "%-7d %-7d\n", $m, $d;
}

输出

Month  Day
1       1      
1       10     
10      1      
10      10     
于 2013-10-09T20:00:03.043 回答
0

假设您所有的日期都遵循相同的格式,那么您甚至不需要正则表达式。解的一般形式如下:

my ($month, $day, $year) = split(m@/@, $date);

如果您正在从文件中读取dates.txt,则可以这样使用它:

open my $DATES, '<', 'dates.txt'
  or die "Couldn't open dates.txt: $!\n";

while (my $date = <$DATES>) {
  $date =~ s@\r|\n@@g; # get rid of trailing newlines, however formatted
  my ($month, $day, $year) = split(m@/@, $date);
  # whatever you need to do with the date parts, do here
};

close DATES;

请注意,根据您所在教育机构的学术荣誉政策,您可能需要在上交作业时引用此 Stack Overflow 答案作为参考,否则将面临各种处罚,甚至可能包括开除。

于 2013-10-09T19:45:21.063 回答
-1

split与切片一起使用:

#!/usr/bin/perl
use warnings;
use strict;
use feature 'say';

for my $date (qw(1/1/2011
                 1/10/2011
                 10/1/2011
                 10/10/2011)) {
    say join "\t", (split m{/}, $date)[0, 1];
}
于 2013-10-09T19:47:06.237 回答