awk / sedを使用して特定の列の内容を抽出する

awk / sedを使用して特定の列の内容を抽出する

提供される文書:

$ cat CronConfig 
 `FILE SYSTEM`
`------------` 
 warningThreshold: 77 
 criticalThreshold: 99

`MEMORY`
`-------`
warningThreshold: 66
criticalThreshold: 88

`CPU`
`----`
intervalCount: 6
intervalSecs: 7
warningThreshold: 99
criticalThreshold: 88

CronConfig上記の内容を含むファイルがあります。私は値を使用し、warningThreshold次のような出力が必要です。MEMORYcriticalThresholdCPU

66
88

この値を取得するには、コマンドを使用します。 (しかし、正しい方法でやっているかどうかはわかりません。)

awk 'BEGIN{FS="\n"; RS="------------"} {print $7}' CronConfig | awk 'NF {print $2}'

awk 'BEGIN{FS="\n"; RS="------------"} {print $15}' CronConfig | awk 'NF {print $2}'

ベストアンサー1

sed複数行を置き換えることでこれを行うことができます。

要するに

$ sed -n '/`MEMORY`/,/^$/{s/^warningThreshold: \([0-9]*\)/\1/p};
          /`CPU`/,/^$/{s/^criticalThreshold: \([0-9]*\)/\1/p}' CronConfig

より多くの説明があります:

sed -nファイル全体を印刷しないでください。

検索するブロックを選択するには

/PATTERN1/,/PATTERN2/

ここで、PATTERN1とPATTERN2はブロック制限です。あなたの場合、MEMORY最初のブロックと2番目のブロックにendを使用できます。^$CPU^$

次に、warningThresholtまたはimportantThresholdを含む行を次の数字に置き換えます。sこれを行うにはsedコマンドを使用します。最後のsコマンドpは結果をエコーするために使用されます。

おすすめ記事