各行で同じキーワードを異なる文字列に置き換えます。

各行で同じキーワードを異なる文字列に置き換えます。

次のコマンドを使用して、使用可能なディスクのリストと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今度は()に別の列「rm」を追加したいが、lsblk -d -o name,ro,rm他の項目を表すために0と1も使用します(0 =固定ディスク、1 =リムーバブルディスク)。

sed(またはawkなど)を使用して3番目の列の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行にすることができます。
  • 時々人々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

関連情報