M152DHD3H4M2の数を増やしたいです。
次の出力
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
答え1
方法1:各文字を別々のフィールドとして扱う
$ echo 'M152DHD3H4M2' | awk -F "" '{for(i=1;i<=4;i++) {$NF++;print}}' OFS=
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
-F ""
入力の各文字を別々のフィールドとして扱うように awk に指示し、出力にフィールド区切りOFS=
文字を追加しないように awk に指示します。次に、必要に応じて最後のフィールドを追加します。
$NF++
最後のフィールドの値を増やします。
POSIXではこれらのヌルフィールド区切り文字は必要ありませんが、少なくともGNU awkとmawkはそれをサポートします。
方法 2:M
フィールド区切り記号として使用
$ echo 'M152DHD3H4M2' | awk -FM '{for(i=1;i<=4;i++) {$NF++;print}}' OFS=M
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
-FM
そして、awkにOFS=M
入力と出力のM
フィールド区切り記号として使用するように指示します。次に、必要に応じて最後のフィールドを追加します。
方法3:以下を使用して文字列を複数の部分に分割します。substr
$ echo 'M152DHD3H4M2' | awk '{for(i=1;i<=4;i++) print substr($1, 1, length($1)-1) i+substr($1, length($1))}'
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
ここでは、部分文字列関数を使用して入力行を手動で分割し、必要に応じてsubstr
最後の文字を増やします。