すべてのハードウェア情報を収集するbashスクリプトがあります。
次のコマンドは、DIMM
メモリモジュールの状態を提供します。
[root@Linux ~]# hpasmcli -s 'show dimm'
DIMM Configuration
------------------
Processor #: 1
Module #: 1
Present: Yes
Form Factor: 9h
Memory Type: DDR3(18h)
Size: 8192 MB
Speed: 1333 MHz
Supports Lock Step: No
Configured for Lock Step: No
Status: Ok
Processor #: 1
Module #: 12
Present: Yes
Form Factor: 9h
Memory Type: DDR3(18h)
Size: 8192 MB
Speed: 1333 MHz
Supports Lock Step: No
Configured for Lock Step: No
Status: Ok
Processor #: 2
Module #: 1
Present: Yes
Form Factor: 9h
Memory Type: DDR3(18h)
Size: 8192 MB
Speed: 1333 MHz
Supports Lock Step: No
Configured for Lock Step: No
Status: Ok
Processor #: 2
Module #: 12
Present: Yes
Form Factor: 9h
Memory Type: DDR3(18h)
Size: 8192 MB
Speed: 1333 MHz
Supports Lock Step: No
Configured for Lock Step: No
Status: DIMM is degraded
Size:
抽出したいので、Status:
以下のように1行にする必要があります。
最終出力は以下の通りです。 PythonやPerlなどの他の言語を使用できますが、bashで書いているので、bashで何かが必要です。複数のタスクを実行しfor loop
、変数を使用して動作させることができますが、単純または短いタスクが必要ですsed/awk
。 sed/awkでこれを達成しますか?
8192MB - Ok
8192MB - OK
8192MB - OK
8192MB - DIMM is degraded
答え1
1つの解決策はnotを使用しますgrep | awk | sed | awk
が、次のいずれかを使用しますawk
。
hpasmcli -s 'show dimm' | awk 'BEGIN { stick=0 } $1 == "Size:" { dimm[++stick] = $2" "$3} $1 == "Status:" { $1=""; status[stick]=$0 } END {for( i in dimm ) { print dimm[i], "-", status[i] } }'
8192 MB - Ok
8192 MB - Ok
8192 MB - Ok
8192 MB - DIMM is degraded
読みやすくするためにスクリプトawk
形式を再指定しました。
BEGIN {
stick=0
}
$1 == "Size:" {
dimm[++stick] = $2" "$3
}
$1 == "Status:" {
$1=""
status[stick]=$0
}
END {
for( i in dimm ) {
print dimm[i], "-", status[i]
}
}'
答え2
マッソサ、やったと思います:)
[root@Linux ~]# hpasmcli -s 'show dimm' | egrep -e Size -e Status | awk -F: '{print $2}' | sed 's/^[ \t]*//' | awk 'NR%2{printf "%s - ",$0;next;}1'
8192 MB - Ok
8192 MB - Ok
8192 MB - Ok
8192 MB - DIMM is degraded
しかし、他の方法があるかどうか知りたいです。私の質問には答えず、他の人が知らせるのを待ちます。