Iソリューションを検索し、成功していない。perlループは、正規表現の一致で印刷の重複を避ける
file.txtを:
Name Server: NS1.SERVER.COM
Name Server: NS2.SERVER.COM
..........................
..........................
Name Server: NS1.SERVER.COM
Name Server: NS2.SERVER.COM
Whois server: whois.directnic.com!
..........................
..........................
Name Server: NS1.SERVER.COM
Name Server: NS2.SERVER.COM
Whois server: whois.directnic.com!
..........................
..........................
私が実行します。
use strict;
use warnings;
my $filename = 'file.txt';
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
while (my $row = <$fh>) {
if ($row =~ /^Name\sServer:\s+(.*+)?/) {
print "dns $1\n";
}
if ($row =~ /Whois.+server:.(.*)/) {
print "whois server: $1\n";
}
}
出力:
dns NS1.SERVER.COM
dns NS2.SERVER.COM
dns NS1.SERVER.COM
dns NS2.SERVER.COM
whois server: whois.directnic.com!
dns NS1.SERVER.COM
dns NS2.SERVER.COM
whois server: whois.directnic.com!
私は、このように取得したい:
dns NS1.SERVER.COM
dns NS2.SERVER.COM
whois server: whois.directnic.com!
私は私が最後に設定した場合、私は最終 (あなたがCで「ブレイク」オペレータまたは類似の言語を使用したことがあれば、それはそのようなものだ。)
を使用することができます知っています。最初の条件で私はこれを得る:
dns NS1.SERVER.COM
最後に設定した場合;第二の条件で、私はこれを取得:
dns NS1.SERVER.COM
dns NS2.SERVER.COM
dns NS1.SERVER.COM
dns NS2.SERVER.COM
whois server: whois.directnic.com!
数とgrepを増やし、一方で私は、解決策を見つけるが、ハッシュを使用して、次のように:私はしばらくの間またはforeachのでこれを行うことができますどのように
my %count_of;
my %count_of_two;
while (my $row = <$fh>) {
if ($row =~ /^Name\sServer:\s+(.*+)?$/) {
$count_of{$row}++;
}
if ($row =~ /Whois.+Server:.(.*)/) {
$count_of_two{$row}++;
}
}
print join "\n", grep { $count_of{$_} > 1 } keys %count_of;
print join "\n", grep { $count_of_two{$_} == 1 } keys %count_of_two;
¿ ?
注:なぜ私はループ印刷中にその機能が重複しているのか知っていると思いますが、別の方法で存在する可能性があります。
私はこれについて研究しますが、解決策を見つけることができません。
ご理解いただきありがとうございます。
なぜもう一度繰り返し行を印刷:!。 'perlの-ne」/^\ + $/gで&&印刷ワット$ {$ない限り_ } ++ 'file' –