web-dev-qa-db-ja.com

同じキーワードを1行あたり異なる文字列に置き換える

次のコマンドを使用して、使用可能なディスクのリストと、それらが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

ここで、別の列「rm」をlsblklsblk -d -o name,ro,rm)に追加したいと思いますが、0と1を使用して別のことを意味します(0 =固定ディスク、1 =取り外し可能) 。

Sed(またはawkなど)を使用して、3番目の列の0と1をYESとNOに置き換える方法はありますか?

1
Mark Roi

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
2
RomanPerekhrest

試してみてください

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 ; }を使用します。
  • ROTYPEに変更することは演習として残されています。
3
Archemar