每行用不同的字符串替换相同的关键字

每行用不同的字符串替换相同的关键字

我使用以下命令返回可用磁盘的列表以及它们是 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 ; }.
  • 更改ROTYPE留作练习。

答案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

相关内容