2012-07-25 113 views
0

我有2個文件:A.txt和B.txt。在文件A.txt中,給出了具有5位數字序列的第一個字段,在B.txt文件整數中。如果File A.txt的前5位與第二個文件B.txt不匹配,則需要在單獨的file.i.e中打印這些編號。 B.txt中的數字必須在另一個文件中打印。使用Perl比較兩個文件

A.TXT

 
81270,UEDP35 
81274,UEDP35 
87562,UEDP35 
89537,UEDP35 
90050,UEDP35 
99358,UEDP35 
99369,UEDP35 
99560,UEDP35 
99561,UEDP35 

B.txt

 
8127047667 
8756209276 
9956176149 
8127463873 
8953713146 
9935805068 
9005080751 
9956088702 
9936916718 
+0

我知道如何用grep或殼裏做。但需要perl。有人請幫我 – gyrous 2012-07-25 14:10:38

+6

[你有什麼嘗試?](http://whathaveyoutried.com) – Thor 2012-07-25 14:12:02

+2

Stackoverflow不是租賃編碼器。如果你有一個特定的問題,然後要求離開,但不要讓人爲你寫一個完整的腳本。 – Quentin 2012-07-25 14:12:42

回答

2
use warnings; 
use strict; 
open AIN, "<A.TXT" or die("A.TXT"); 
open BIN, "<B.TXT" or die("B.TXT"); 
my %seen; 
while (<AIN>) { 
    my $v = (split(/,/))[0]; 
    $seen{$v}++; 
} 
while (<BIN>) { 
    my $v=(split)[0]; 
    print "$v\n" if not $seen{substr($v, 0, 5)}; 
} 
close AIN; 
close BIN; 
+0

:非常感謝.................. – gyrous 2012-07-25 14:31:39

+4

在代碼中揀配nits:您應該檢查open語句是否成功,通常最好使用'詞法文件句柄' :'打開我的$ a_in,'<','A.TXT'或者死掉「無法打開A.TXT($!)」;'(如果在變量中可以避免重複文件名)。但它應該工作,這是重要的。 – 2012-07-25 14:54:15

+0

嗨,我正在嘗試爲此做出循環。給一個和B文件作爲輸入一次比較完成一個循環,再次我想給另一個輸入文件說AA.txt BB.txt。 ls -1 UEDP * |而讀線;做f1 ='echo $ line | cut -f1 -d'。'; f2 ='ls -1 BB_UEDP * | grep $ f1'; ./test.sh $ f1 $ f2;完成。我在./test.sh第7行的關閉文件句柄A處得到了低於error readline()。 readline()在關閉的文件句柄B處./test.sh第12行。在這兩個輸入文件中。 UEDP是文件中的常用詞 – gyrous 2012-07-26 11:03:57