データブロックから特定の値を抽出する

データブロックから特定の値を抽出する

以下のようにグローバルIDで区切られたデータの塊があります。次の例では、id値が最も高い最後のデータ塊を抽出する必要がありますid="82"

<gc type="global" id="80" totalid="80" intervalms="315080.595">
---Remaining data---------
 </gc>
 <gc type="global" id="81" totalid="81" intervalms="315080.595">
---Remaining data---------
 </gc>
 <gc type="global" id="82" totalid="82" intervalms="315080.595">
---Remaining data---------
 </gc>

私は次のことができます。ただし、id値は2桁に制限されます。 id値に数値制限を適用せずに最後のデータ塊をどのようにエクスポートできますか?

data1=`grep "gc type="global"" abc.log| cut -c24-26|tail -n1`

lastdata="gc type="global"=$data1"

sed -n '/'"${lastdata}"'/,$p' abc.log>last_block_data.log

ベストアンサー1

cut文字ごとにセルは必要ありません-c。代わりに、cut指定された-dリミッタを使用できます。

grep '^<gc type="global"' <infile | cut -d\" -f4

80
81
82

これは"、行内の4番目に区切られたフィールドのみを取得します。したがって、フィールドには、二重引用符がない限り、必要な数の文字(または必要に応じて数字)を含めることができます。

しかし、ライン全体が欲しいなら、そうする必要はありません。

sed -e'/^<gc type="global"/!{g;/./q;d;}' -e'h;$!d' <infile

おすすめ記事