我使用以下命令返回可用磁盘的列表以及它们是 SSD 还是旋转磁盘(基本上将 lsblk 输出中的 0 和 1 替换为其实际含义):
lsblk -d -o name,ro | sed "s/RO/\ TYPE/; s/NAME/DISK/; s/0/SSD/g; s/1/ROT/g"
示例输出:
DISK TYPE
sda SSD
sdb ROT
现在我想向lsblk
( lsblk -d -o name,ro,rm
) 添加另一列“rm”,但它也使用 0 和 1 来表示不同的事物(0=固定磁盘,1=可移动磁盘)。
有没有办法使用 sed (或 awk 或其他任何东西)将第三列中的 0 和 1 替换为 YES 和 NO?
答案1
尝试
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
而不是{ print ; }
. - 更改
RO
为TYPE
留作练习。
答案2
Awk
方法:
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] }'
示例输出:
DISK TYPE REMOVABLE
sda SSD NO
sr0 SSD YES