输出不正确,在逗号后丢失数据

时间:2012-11-02 10:24:54

标签: perl

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

示例

FILE1.TXT

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

FILE2.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.

3 个答案:

答案 0 :(得分:1)

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

my $extractor = sub { ( $_[0] =~ /^(.+?)\,\w/ )[0] };

答案 1 :(得分:1)

原因在于:

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

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

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

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

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

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

答案 2 :(得分:1)

使用comm命令:

$ comm -23 <(sort -n file1) <(sort -n file2)
2222,2
4444,4