sedやawkで置換前の値を元に計算した値で置換を行う

sedやawkで、置換前の値を元に、計算した値で置換を行いたいというのがあったので、備忘で残しておく。
例えば、以下のようなファイルに対し、数字を3足した内容を出力させたいとする。

[root@BS-PUB-CENT7-01 ~]# cat test.txt
test 1
test 2
test 3
test 4
test 5
test 6
test 7
test 8
test 9
test 10

1.gnu sedの場合

sedの場合、sed自体には計算を行う機能がないため、後方参照とサブプロセス、さらに後方参照で得た値をサブプロセスに渡すために、置換した値をOSのコマンドとして利用して対応する。

cat test.txt | sed 's/\([a-z]*\) \([0-9]*\)/echo \1 $((\2 + 3))/eg'
[root@BS-PUB-CENT7-01 ~]# cat test.txt | sed 's/\([a-z]*\) \([0-9]*\)/echo \1 $((\2 + 3))/eg'
test 4
test 5
test 6
test 7
test 8
test 9
test 10
test 11
test 12
test 13
Sponsored Links

2.awkを用いる場合

awkを用いる場合は、 今回の例のような場合は単純で、以下のようにコマンドを実行してやれば良い。

awk '{print $1,$2 + 3}'
[root@BS-PUB-CENT7-01 ~]# cat test.txt | awk '{print $1,$2 + 3}'
test 4
test 5
test 6
test 7
test 8
test 9
test 10
test 11
test 12
test 13

 

基本はawkを使うといいだろう。
対象のファイルを上書き保存したいといった場合であれば、sedを使うほうが良いかもしれない。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*