Substituindo a mesma palavra-chave por diferentes strings por linha

1

Estou usando o seguinte comando para retornar uma lista de discos disponíveis e se eles são ssd ou rotacionais (basicamente substituindo 0 e 1 na saída do lsblk pelo seu significado real):

lsblk -d -o name,ro | sed "s/RO/\ TYPE/; s/NAME/DISK/; s/0/SSD/g; s/1/ROT/g"

exemplo de saída:

DISK  TYPE
sda   SSD
sdb   ROT

Agora eu gostaria de adicionar outra coluna, "rm", a lsblk ( lsblk -d -o name,ro,rm ), mas ela também usa 0 e 1 para significar uma coisa diferente (0 = disco fixo, 1 = removível). / p>

Existe uma maneira de usar sed (ou awk ou qualquer outra coisa) para substituir 0 e 1 na terceira coluna com YES e NO?

    
por Mark Roi 03.07.2018 / 15:47

2 respostas

2

Awk abordagem:

lsblk -d -o name,ro,rm \
| awk 'NR == 1{ print "DISK TYPE REMOVABLE"; split("SSD ROT", ro); split("NO YES", rm); next}
      { print $1, ro[$2+1], rm[$3+1] }'

Exemplo de saída:

DISK TYPE REMOVABLE
sda SSD NO
sr0 SSD YES
    
por 03.07.2018 / 16:32
3

tente

lsblk -d -o name,ro,rm |
   awk '$2 == 0 { $2 = "SSD" ; } $2 == 1 { $2 = "ROT" ; }
        $3 == 0 { $3 = "NO" ; } $3  == 1 { $3 = "YES" ;}
        { print ; }'
  • isso pode ser de uma só linha.
  • em algum momento, as pessoas usam 1 em vez de { print ; } .
  • a alteração de RO para TYPE é deixada como um exercício.
por 03.07.2018 / 16:03