ファイルの最長部分を見つける

ファイルの最長部分を見つける

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}'

おすすめ記事