awk: find and replace in certain field only, help needed

I got a sample file like this.

$ cat test
12|13|100|s
12|13|100|s
100|13|100|s
12|13|100|s

I want to replace all 100 by 2000 only in 3rd field using "awk"

This is replacing all 100's :frowning:
$ awk -F "|" '{gsub( /100/,"2000");print}' test
12|13|2000|s
12|13|2000|s
2000|13|2000|s
12|13|2000|s

I tried using something like this also - '$3 ~ /100/
but no luck :frowning:

Please help.

HTH,
jkl_jkl

use sed instead.

/home/kamitsin>sed 's/|100/|2000/g' s2
12|13|2000|s
12|13|2000|s
100|13|2000|s
12|13|2000|s

Cheers,
K

Try this:

awk -F "|" '{ if ( $3 == 100 ) print $1"|"$2"|"2000"|"$4 }' test
awk 'BEGIN{OFS=FS="|"}$3==100{$3=2000}{print}' file

This is a nice reply(more generic) , worked for me :slight_smile: Thanks :slight_smile:

Hi All,

Need a quick help on the similar issue...I am trying to replace the 87th column ina file with some other value but this command doesn't work for me.

awk 'BEGIN{OFS=FS=";"}$87==10000019{$9=123456700}{print}' ab

Can someone help please...