0

以下は、2 つのファイルを比較するために作成したコードです。基本的に、プログラムは、昨日のレポートには存在するが、今日のレポート ファイルには存在しないレコードを取得しようとしています。

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

3 に答える 3

1

その理由は次のとおりです。

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

正規表現は、コンマの前の部分のみを返します。ただし、キャプチャを拡張しても問題は解決しません。

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

新しい正規表現は文字列全体に一致しますが、数値比較は不平を言います:

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

for string comparisonに変更==すると警告は消えますが、文字列全体を比較するかどうかは明確ではありません。eq

于 2012-11-02T10:40:08.660 に答える
1

うーん、しかし、エクストラクタはコンマの前の部分だけを返しています:

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

通信コマンドの使用:

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