awkにaplha数値フィールドを追加する方法

awkにaplha数値フィールドを追加する方法

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最後の文字を増やします。

関連情報