extrai o campo do arquivo usando sed ou awk

0

Eu tenho o script bash para coletar todas as informações de hardware, mas a parte de informação de memória seguinte está faltando, então é isso que estou tentando fazer.

O comando a seguir fornece o status do módulo de memória 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

deseja extrair Size: e Status: e precisa disso em uma única linha, como seguir

A saída final será semelhante a seguinte. Eu posso usar outra linguagem como python ou perl, mas eu escrevi no bash então eu preciso de algo no bash, eu posso fazer vários for loop e jogar com variável para fazer o trabalho, mas eu preciso de algo fácil ou in-short único como sed/awk . como posso conseguir isso em sed / awk?

8192MB - Ok
8192MB - OK
8192MB - OK 
8192MB - DIMM is degraded
    
por Satish 25.10.2018 / 19:23

2 respostas

1

Uma solução que não é grep | awk | sed | awk , mas apenas usa um 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

O script awk , reformatado para legibilidade:

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] 
  } 
}'
    
por 25.10.2018 / 19:35
0

Oh cara, eu acho que fiz isso :)

[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

Ainda gostaria de saber se de alguma forma nós podemos fazer isso, eu não vou responder a minha pergunta, eu vou esperar por outras pessoas entrarem em contato.

    
por 25.10.2018 / 19:29