모든 하드웨어 정보를 수집하는 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:
아래와 같이 한 줄에 있어야 합니다.
최종 출력은 아래와 같습니다. Python이나 Perl과 같은 다른 언어를 사용할 수 있지만 bash로 작성 중이므로 bash에서 뭔가가 필요합니다. 여러 작업을 수행 for loop
하고 변수를 사용하여 작동하게 할 수 있지만 간단하거나 짧은 작업이 필요합니다 sed/awk
. sed/awk에서 이것을 달성합니까?
8192MB - Ok
8192MB - OK
8192MB - OK
8192MB - DIMM is degraded
답변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
하지만 다른 방법이 있는지 알고 싶습니다. 제 질문에는 대답하지 않고 다른 사람들이 알려줄 때까지 기다리겠습니다.