1 つのファイルに数百万行の gzip ファイルが複数あります。通常、1assocId
と1 IMPI
、、IMPU
の数字がありますMSISDN
。
assoc=1
IMPI=XXX
IMPU=YYY
MSISDN=ZZZ
IMSI=PPP
ただし、場合によっては、以下のように、1人が複数の、およびを持つことがassocId
できます。IMPI
IMPU
IMSI
MSISDN
assocId=2
IMPI=ddd
IMPI=eee
IMPU=fff
IMPU=ggg
IMSI=hhh
IMSI=iii
MSISDN=jjj
MSISDN=kkk
assocId
複数IMPI
、およびをIMPU
含むすべての添付ファイルを一覧表示したいと思います。IMSI
MSISDN
1つは複数の1、2、またはそれ以上のassocId
ものを持つことができ、それに関連付けられています。IMPI
IMPU
IMSI
MSISDN
提案してください。
ベストアンサー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
これがあなたがすべきことの基礎になることを願っています。