約10,000個の数字を含む配列SPLNOがあります。次に、MDN.TXTファイル(約1.5lacレコードを含む)から配列で加入者番号を検索したいと思います。加入者番号が配列に見つかった場合は、次のようにします。私の問題は、数値に対して10kレコードの配列全体を取得するため、時間がかかることです。したがって、1.5lacレコードの場合は繰り返されます(1.5lac * 10K)。効率的な方法を提案してください。
SPLNO.TXT 例:
918542054921|30|1|2
918542144944|12|1|2
918542155955|12|1|2 918542166966|12 |1|2 918542355955|12|
2 9 1 8542455955|12|1|2 918542555955 |12|1| 2 918542955955|12|1|2
MDN.TXTの例:
8542166966
8542355955
8542555955
awk -F"|" 'FNR==1 { ++counter}
counter==1 {SPLNOPULSE[$1]=$4;SPLNOAMT[$1]=$3;SPLNOMAXLEN[$1]=$2;next}
{
for ( mdn in SPLNOMAXLEN)
{
if ( ($1 ~ "^"mdn && length($1) <=SPLNOMAXLEN[mdn]) || ("91"$1 ~ "^"mdn && length("91"$1) <=SPLNOMAXLEN[mdn]) )
{
print found
}
else
print not found
}
} ' SPLNO.TXT MDN.TXT
ベストアンサー1
これは使用する1つの方法ですperl
。
#!/usr/bin/perl
# read the subscribers
open(A,"<","SPLNO.TXT");
while(<A>) {
chomp;
@a=split(/\|/,$_);
$splnopulse{$a[0]}=$3;
$splnoamt{$a[0]}=$2;
$splnomaxlen{$a[0]}=$1;
}
close A;
# read the mdn, looking for matches
open(B,"<","MDN.TXT");
while(<B>) {
chomp;
@b=split(/\|/,$_);
foreach $mdn (keys %splnomaxlen) {
if($mdn eq $b[0] || "$mdn" eq "91" . $b[0]) {
print "found\n";
} else {
print "not found\n";
}
}
}
close B;