0

下面是我为比较两个文件而编写的代码。基本上,该程序正在尝试获取昨天报告中存在但今天报告文件中不存在的那些记录。

例子

文件1.txt

1111,1
2222,2
3333,3
4444,4

文件2.txt

1111,1
5555,5
6666,6
3333,3
7777,7

perl program.plx File1.txt File2.txt

输出应该是

2222,2
4444,4

但我越来越

2222
4444

即我缺少逗号后的数据。我认为正则表达式部分存在一些问题。请让我知道我在哪里做错了。谢谢 :)

    code deleted due to privacy reasons.
4

3 回答 3

1

嗯,但是您的提取器只返回逗号之前的部分:

my $extractor = sub { ( $_[0] =~ /^(.+?)\,\w/ )[0] };
于 2012-11-02T10:37:35.593 回答
1

原因在这里:

$_[0] =~ /^(.+?)\,\w/ )[0] 

您的正则表达式仅返回逗号之前的部分。但是,扩展捕获并不能解决问题:

$_[0] =~ /^(.+?\,\w)/ )[0] 

新的正则表达式将匹配整个字符串,但数字比较会报错:

Argument "1111,1" isn't numeric in numeric eq (==) at

更改==eqfor 字符串比较会消除警告,但不清楚是否要比较整个字符串。

于 2012-11-02T10:40:08.660 回答
1

使用通讯命令:

$ comm -23 <(sort -n file1) <(sort -n file2)
2222,2
4444,4
于 2012-11-02T11:28:27.947 回答