Q:EPS_PROFILE_ID、MMEFEATURELISTの組み合わせを持つ340039などで始まるすべてのIMSIリストが必要です。
入力する
<BEGINFILE>
<SUBBEGIN
IMSI=340039XXXXXXXXX;
MSISDN=59995171393;
EPS_PROFILE_ID=1;
PLMNTPLID=1;
SUB_DYN_EPS_ID=1;
MMEHOST=XXXXXXXXXXXXXXXXXXXXXXXXXX.VVV.VV;
MMEREALM=dwcxd.dnhjxcdws.cdnjkcd;
EPS_IMEI=155186158551851658;
EPS_IMEISV=01;
MMEFEATURELIST=ALL_APN;
MMETIMESTAMP=15513535;
S4SGSNTIMESTAMP=0;
HLR_INDEX=1;
LTEAUTOPROV=NO;
MPS=NO;
RELAY=NO;
<SUBEND
<SUBBEGIN
IMSI=340038XXXXXXXXX;
MSISDN=59995171393;
PLMNTPLID=1;
CURRENTNAM=BOTH;
CAT=COMMON;
TBS=TS11&TS12&TS21&TS22&TS61&BS26&BS2G;
VLRLIST=2;
SGSNLIST=2;
<SUBEND
<ENDFILE>
希望の出力
IMSI=340039XXXXXXXXX;EPS_PROFILE_ID=1;MMEFEATURELIST=ALL_APN;
ベストアンサー1
私はperl
この種の分析を好む
perl -ne '
$/ = "\n<SUBBEGIN\n"; # Read blocks starting with this pattern
($i) = /\b(IMSI=340039[^;]*)/; # Get IMSI and value
($e) = /\b(EPS_PROFILE_ID=[^;]+)/; # Get EPS_PROFILE_ID and value
($m) = /\b(MMEFEATURELIST=[^;]+)/; # Get MMEFEATURELIST and value
print "$i;$e;$m;\n" if $i && $e && $m; # Print result only if all three items are present
' input_file
例の出力
IMSI=340039XXXXXXXXX;EPS_PROFILE_ID=1;MMEFEATURELIST=ALL_APN;