5GBなどの大きなファイルがあります.gz
。これらのファイルには、これらの値が存在する場合に検索して抽出する値を含む複数のXMLファイルがあります。
NOOSS
たとえば、ファイルからそのタグの名前とサブコンテンツを含むタグを抽出したいとします( たとえば<pmJobId>
、、、、、<requestedJobState>
<reportingPeriod>
<jobPriority>
.gz
<Pm xmlns="urnCmwPm">
<pmId>1</pmId>
<PmJob>
<pmJobId>NOOSSCONTROLExample</pmJobId>
<requestedJobState>ACTIVE</requestedJobState>
<reportingPeriod>FIVE_MIN</reportingPeriod>
<jobType>MEASUREMENTJOB</jobType>
<jobPriority>HIGH</jobPriority>
<granularityPeriod>FIVE_MIN</granularityPeriod>
<jobGroup>Sla</jobGroup>
<reportContentGeneration>CHANGED_ONLY</reportContentGeneration>
<MeasurementReader>
<measurementReaderId>mr_2</measurementReaderId>
<measurementSpecification struct="MeasurementSpecification">
<measurementTypeRef>Anything</measurementTypeRef>
</measurementSpecification>
<thresholdRateOfVariation>PER_SECOND</thresholdRateOfVariation>
</MeasurementReader>
<MeasurementReader>
<measurementReaderId>mr_1</measurementReaderId>
<measurementSpecification struct="MeasurementSpecification">
<measurementTypeRef>ManagedElement=1,SystemFunctions=1,Pm=1,PmGroup=OSProcessingLogicalUnit,MeasurementType=CPULoad.Total</measurementTypeRef>
</measurementSpecification>
<thresholdRateOfVariation>PER_SECOND</thresholdRateOfVariation>
</MeasurementReader>
</PmJob>
</Pm>
使用していますが、cat *gz 1 zgrep -a "PmJobId"
出力には<pmJobId>
値のみが表示され、残りの情報やラベルは表示されません。
私を助けてください。私はこれに非常に慣れていません。
CentOS-RedHat Linuxを使用しています。
ありがとう
答え1
のXML文書がすべての点でうまく構成されていて正確であると仮定すると(質問の例に誤った名前空間宣言がある)、次の値を使用してノードに対応する文書部分をfile.xml
抽出できます。 XMLパーサーサブストリングを含むコマンドラインが含まれています。PmJob
pmJobID
NOOSS
xmlstarlet
xmlstarlet sel -t -c '//PmJob[contains(pmJobId,"NOOSS")]' -nl file.xml
このコマンドは、値に部分文字列を含む子PmJob
ノードを含むすべてのノードを選択します。このユーティリティは、選択したノードとすべての子ノードのコピーを返します。pmJobId
NOOSS
PmJob
答え2
XML文書の形式が正しく有効であると仮定すると、このxmllint
ユーティリティを使用して必要なノードを出力できます。
$ xmllint --xpath '//PmJob[contains(pmJobId,"NOOSS")]' file.xml
<PmJob>
<pmJobId>NOOSSCONTROLExample</pmJobId>
<requestedJobState>ACTIVE</requestedJobState>
<reportingPeriod>FIVE_MIN</reportingPeriod>
<jobType>MEASUREMENTJOB</jobType>
<jobPriority>HIGH</jobPriority>
<granularityPeriod>FIVE_MIN</granularityPeriod>
<jobGroup>Sla</jobGroup>
<reportContentGeneration>CHANGED_ONLY</reportContentGeneration>
<MeasurementReader>
<measurementReaderId>mr_2</measurementReaderId>
<measurementSpecification struct="MeasurementSpecification">
<measurementTypeRef>Anything</measurementTypeRef>
</measurementSpecification>
<thresholdRateOfVariation>PER_SECOND</thresholdRateOfVariation>
</MeasurementReader>
<MeasurementReader>
<measurementReaderId>mr_1</measurementReaderId>
<measurementSpecification struct="MeasurementSpecification">
<measurementTypeRef>ManagedElement=1,SystemFunctions=1,Pm=1,PmGroup=OSProcessingLogicalUnit,MeasurementType=CPULoad.Total</measurementTypeRef>
</measurementSpecification>
<thresholdRateOfVariation>PER_SECOND</thresholdRateOfVariation>
</MeasurementReader>
</PmJob>
$
このユーティリティは、多くのLinuxディストリビューションにデフォルトでインストールされます。