正規表現を区切り文字として使用するときに正しい区切り文字を再印刷する方法は?

正規表現を区切り文字として使用するときに正しい区切り文字を再印刷する方法は?

私の行は次のとおりです

123-456-789 12.34.56 example

12を選択して2を追加してから、行全体をそのまま印刷したいと思います。したがって、結果は次のようになります。

123-456-789 14.34.56 example

私は次のような奇妙な表現を持っています。

awk 'BEGIN {FS="[ .]"}{$2=$2+2}{print}'

しかしそれは私に与えた

123-456-789 14 34 56 example

ドットが消えてスペースに置き換えられました。

ベストアンサー1

awk '{ split($2,a,"\."); a[1]+=2; $2=sprintf("%d.%d.%d", a[1],a[2],a[3]) } 1' file

または、

awk '{ split($2,a,"\."); $2=sprintf("%d.%d.%d", a[1] + 2,a[2],a[3]) } 1' file

行をスペースで区切られたフィールドのセットとして読み込みます。 2番目のフィールドをポイントに分割し、結果の最初の部分に2を追加します。次に、結果レコードを印刷する前に、2番目のフィールドをドットで区切られた3つの整数に再フォーマットします(印刷は1ショートカットの終わりにある項目によって実行されます{ print })。

これは、2番目のレコードが実際に3つの点で区切られた整数であることを知っていると仮定します。

何が起こっているのか、非常に明確で理解しメンテナンスしやすいので、こうすることです。

おすすめ記事