重複したキーを持つレコードを探す

重複したキーを持つレコードを探す

1 つのファイルに数百万行の gzip ファイルが複数あります。通常、1assocIdと1 IMPI、、IMPUの数字がありますMSISDN

assoc=1
IMPI=XXX
IMPU=YYY
MSISDN=ZZZ
IMSI=PPP

ただし、場合によっては、以下のように、1人が複数の、およびを持つことがassocIdできます。IMPIIMPUIMSIMSISDN

assocId=2
IMPI=ddd
IMPI=eee
IMPU=fff
IMPU=ggg
IMSI=hhh
IMSI=iii
MSISDN=jjj
MSISDN=kkk

assocId複数IMPI、およびをIMPU含むすべての添付ファイルを一覧表示したいと思います。IMSIMSISDN

1つは複数の1、2、またはそれ以上のassocIdものを持つことができ、それに関連付けられています。IMPIIMPUIMSIMSISDN

提案してください。

ベストアンサー1

テストソースファイルを作成しました。

assocId=1
IMPI=XXX
IMPU=YYY
MSISDN=ZZZ
IMSI=PPP
assocId=2
IMPI=ddd
IMPI=eee
IMPU=fff
IMPU=ggg
IMSI=hhh
IMSI=iii
MSISDN=jjj
MSISDN=kkk
assocId=3
IMPI=XXX
IMPU=YYY
MSISDN=ZZZ
IMSI=PPP
assocId=4
IMPI=ddd
IMPI=eee
IMPU=fff
IMPU=ggg
IMSI=hhh
IMSI=iii
MSISDN=jjj
MSISDN=kkk

その後、次のGAWKスクリプトを作成しました。

#!/usr/bin/gawk -f
#
# Define the processing for a change of associd.
#
# NB: This function uses the GLOBAL variables:
#       IMPI
#       IMPU
#       IMSI
#       MSISDN
#
function new_assoc(assoc,     flag) {
        flag = 0
        if (IMPI > 1) flag=1
        if (IMPU > 1) flag=1
        if (IMSI > 1) flag=1
        if (MSISDN > 1) flag=1
        if (flag > 0) printf( "Found a multiple entry: %d\n", assoc )
        IMPI = IMPU = IMSI = MSISDN = 0
}
#
#       First thing, set up the field seperator.
#
BEGIN {
        FS = "="
}
#
#       Every time we hit an assoc line handle the previous one and then
#       initialise.
#
/^assocId/ {
        new_assoc( assoc )
        assoc = $2
}
#
#       Total up the four entries:
#
/^IMPI/   { IMPI++   }
/^IMPU/   { IMPU++   }
/^IMSI/   { IMSI++   }
/^MSISDN/ { MSISDN++ }
#
#       Ensure we process the last assoc on EOF:
#
END {
        new_assoc( assoc )
}

私がそれを実行したとき:

$ ./scan_it <src
Found a multiple entry: 2
Found a multiple entry: 4

これがあなたがすべきことの基礎になることを願っています。

おすすめ記事