SUBBEGINで始まり、SUBENDで終わるファイルがあり、その間に行がたくさんあります。 SUBBEGINとSUBENDの間に最大行数を持つセクションを取得したいと思います。このフィルタリングのためのコマンドも取得すると役に立ちます。後で使用できる1行のコマンドとスクリプト。
<SUBBEGIN
IMSI=XXXXXXXX;
MSISDN=XXXXXXXXXXXX;
DEFCALL=TS11;
CURRENTNAM=BOTH;
CAT=COMMON;
TBS=TS11&TS12&TS21&TS22&TS61&BS26&BS2G;
ODBIC=BAIC;
ODBOC=BAOC;
<SUBEND
<SUBBEGIN
IMSI=XXXXXXXX;
MSISDN=XXXXXXXXXXXX;
DEFCALL=TS11;
CURRENTNAM=BOTH;
<SUBEND
必要なものは次のとおりです。
<SUBBEGIN
IMSI=XXXXXXXX;
MSISDN=XXXXXXXXXXXX;
DEFCALL=TS11;
CURRENTNAM=BOTH;
CAT=COMMON;
TBS=TS11&TS12&TS21&TS22&TS61&BS26&BS2G;
ODBIC=BAIC;
ODBOC=BAOC;
<SUBEND
おすすめしてください! !
ベストアンサー1
GNUの使用awk
:
gawk -v 'RS=<SUBEND\n' -v ORS= -F'\n' '
NF > max {max = NF; ret = $0 RT}
END {if (max) print ret}'
ここでは<SUBEND
、改行文字をR
エコーS
区切り記号に設定します。したがって、レコードは1から次に<SUBEND\n
実行され、これは入力例のレコードと一致します<SUBBEGIN...<SUBEND
。これらのレコードの間に異なる内容がある場合、または1つのレコードと次のレコードの間に改行がない可能性がある場合は、<SUBBEGIN...<SUBEND
メソッドを調整する必要があります。<SUBEND
<SUBBEGIN
たとえば、
gawk -v 'RS=<SUBEND' -F'\n' '
!(RT && sub(/.*<SUBBEGIN/, "<SUBBEGIN")) {next}
NF > max {max = NF; ret = $0 RT}
END {if (max) print ret}'