Usando a função substr
do awk
Isso remove o primeiro e o último caractere de cada string:
$ systool -c fc_host -v | awk '/Class Device =/{host=substr($4,2,length($4)-2)}/port_state/{print host,substr($3,2,length($3)-2)}'
host1 Online
Como funciona:
No código com o qual você começou, havia a linha
host=$4
No código revisado, isso é substituído por:
host=substr($4,2,length($4)-2)
A função substr
retorna uma subcadeia de $4
. Nesse caso, ele inicia a partir do segundo caractere e estende um comprimento de length($4)-2
. Assim, isso inclui todos os caracteres, exceto o primeiro e o último (que são aspas duplas).
Pelo mesmo motivo, este comando:
print host,$3)
foi substituído por:
print host,substr($3,2,length($3)-2)
Usando a função gsub
do GNU awk
Como alternativa, gsub
pode ser usado para remover as aspas duplas:
$ systool -c fc_host -v | awk '/Class Device =/{gsub("\"","",$4);host=$4}/port_state/{gsub("\"","",$3);print host,$3}'
host1 Online
Como funciona
Novamente, é como o código que você começou, mas com dois novos comandos adicionados:
gsub("\"","",$4)
gsub("\"","",$3)
gsub
faz substituições. Nesse caso, ele substitui "
por uma string vazia, removendo as aspas duplas. Na primeira linha acima, ele os remove de $4
(que é o host) e na segunda linha acima, remove-os de $3
(que é o port_state
).
Usando o Separador de Campo do awk
$ systool -c fc_host -v | awk -F'"' '/Class Device =/{host=$2} /port_state/{print host,$2}'
host1 Online