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
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?
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 ; }'
1
em vez de { print ; }
. RO
para TYPE
é deixada como um exercício. Tags text-processing awk sed lsblk