perl - 从文件中提取单词,但每个单词一次

标签 perl

我想编写一个 perl 程序来读取文件并提取其中的日期。但是,如果日期经过多次,我将只打印一次。例如:

On 01/10/2011 I went home. On 02/02/2012, I
went to my school. On 02/02/2012, I went
to London.

输出应该是:

01/10/2011
02/02/2012

我可以通过将日期添加到数组并在每次读取新日期时控制它来实现。但我要求一种更有效的方法。有没有合乎逻辑的方法来做到这一点?或 perl 中的任何数据结构?

最佳答案

它将逐行扫描以查找 \d\d/\d\d/\d{4} 格式的日期并将它们作为键保存在散列中。

文件读取完成后,它会打印这些唯一键。

perl -nE '$s{$_}++ for m| (\d\d/\d\d/\d{4}) |xg;}{say for sort keys %s' file

它可以被翻译成更易读的形式(加上一些检查)

use strict;
open my $fh, "<", "file" or die $!;

my %s;
while (my $line = <$fh>) {

  my @dates = $line =~ m| (\d\d/\d\d/\d{4}) |xg;

  for my $date (@dates) {
    $s{$date} += 1;
  }
}

for my $date (sort keys %s) {

  print $date, "\n";
}

关于perl - 从文件中提取单词,但每个单词一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859981/

相关文章:

perl - 使用 Perl 进行测试自动化

perl - Perl 究竟是如何处理运算符链的?

string - AWK、Perl 还是 Shell? 3 列数据文件中的唯一字符串及其最大值

perl - Net::SMTP::SSL(通过 gmail 和 amazon smtp)- 发送带附件的电子邮件时为 'Connection Closed'

python - 使用 perl 或 python 更改文本

linux - 如何找出并控制 Perl 模块在本地存储的位置?

从 Perl 调用的 Perl 脚本似乎没有刷新标准输出

单引号之间的 Perl 捕获

perl - 字数统计程序有什么问题?

perl - 如何在 Perl 中打印匹配的行和接下来的三行?