Hi,
Could you please help me finding a way to replace a specific value in a text block when matching a key pattern ?
I got the keys and the values from a command similar to:
echo -e "key01 Nvalue01-1 Nvalue01-2 Nvalue01-3\nkey02 Nvalue02-1 Nvalue02-2 Nvalue02-3 \nkey03 Nvalue03-1 Nvalue03-2 Nvalue03-3"
key01 Nvalue01-1 Nvalue01-2 Nvalue01-3
key02 Nvalue02-1 Nvalue02-2 Nvalue02-3
key03 Nvalue03-1 Nvalue03-2 Nvalue03-3
The file which contains the text blocks is similar to:
cat file1
[key00]
fieldA = value00
fieldB = value00B
fieldC = value00C
[key01]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key01-new]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key02]
fieldA = value02
fieldB = value02B
fieldC = value02C
filedX = textstring
[key02-new]
fieldA = value02
fieldB = value02B
fieldC = value02C
[key-03]
fieldA = value03
fieldB = value03B
fieldC = value03C
[key03-new]
fieldA = value03
fieldB = value03B
fieldC = value03C
filedH = somevalue
[key05]
fieldA = value04
fieldB = value05B
fieldC = value05C
filedD = othervalue
[key06]
fieldA = value06
fieldB = value06B
fieldC = value06C
I want to replace fieldA
fieldB
and fieldC
values for the keys: key01-new
key02-new
and key03-new
.
Desired output should be similar to:
[key00]
fieldA = value00
fieldB = value00B
fieldC = value00C
[key01]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key01-new]
fieldA = Nvalue01-1
fieldB = Nvalue01-2
fieldC = Nvalue01-3
[key02]
fieldA = value02
fieldB = value02B
fieldC = value02C
filedX = textstring
[key02-new]
fieldA = Nvalue02-1
fieldB = Nvalue02-2
fieldC = Nvalue02-3
[key-03]
fieldA = value03
fieldB = value03B
fieldC = value03C
[key03-new]
fieldA = Nvalue03-1
fieldB = Nvalue03-2
fieldC = Nvalue03-3
filedH = somevalue
[key05]
fieldA = value04
fieldB = value05B
fieldC = value05C
filedD = othervalue
[key06]
fieldA = value06
fieldB = value06B
fieldC = value06C
Below is what I have tried so far, but as you can see is not working very well.
Key matching works, and presume in order to have a single iteration, I need to read keys and values into an array, and I'm afraid this is beyond my capabilities.
echo -e "key01 Nvalue01-1 Nvalue01-2 Nvalue01-3\nkey02 Nvalue02-1 Nvalue02-2 Nvalue02-3 \nkey03 Nvalue03-1 Nvalue03-2 Nvalue03-3" | while read k1 v1 v2 v3 ; do awk -v key=$k1 -v vl1=$v1 -v vl2=$v2 -v vl3=$v3 '/\[.*\]/ {if ($0 ~ key"-new") replace=1; else replace=0;} {if (replace && $1 == "fieldA" ) $3=vl1 ; else if (replace && $1 == "fieldB" ) $3=vl2 ; else if (replace && $1 == "fieldC" ) $3=vl3 ;}1' file1 ; done
[key00]
fieldA = value00
fieldB = value00B
fieldC = value00C
[key01]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key01-new]
fieldA = Nvalue01-1
fieldB = Nvalue01-2
fieldC = Nvalue01-3
[key02]
fieldA = value02
fieldB = value02B
fieldC = value02C
filedX = textstring
[key02-new]
fieldA = value02
fieldB = value02B
fieldC = value02C
[key-03]
fieldA = value03
fieldB = value03B
fieldC = value03C
[key03-new]
fieldA = value03
fieldB = value03B
fieldC = value03C
filedH = somevalue
[key05]
fieldA = value04
fieldB = value05B
fieldC = value05C
filedD = othervalue
[key06]
fieldA = value06
fieldB = value06B
fieldC = value06C
[key00]
fieldA = value00
fieldB = value00B
fieldC = value00C
[key01]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key01-new]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key02]
fieldA = value02
fieldB = value02B
fieldC = value02C
filedX = textstring
[key02-new]
fieldA = Nvalue02-1
fieldB = Nvalue02-2
fieldC = Nvalue02-3
[key-03]
fieldA = value03
fieldB = value03B
fieldC = value03C
[key03-new]
fieldA = value03
fieldB = value03B
fieldC = value03C
filedH = somevalue
[key05]
fieldA = value04
fieldB = value05B
fieldC = value05C
filedD = othervalue
[key06]
fieldA = value06
fieldB = value06B
fieldC = value06C
[key00]
fieldA = value00
fieldB = value00B
fieldC = value00C
[key01]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key01-new]
fieldA = value01
fieldB = value01B
fieldC = value01C
[key02]
fieldA = value02
fieldB = value02B
fieldC = value02C
filedX = textstring
[key02-new]
fieldA = value02
fieldB = value02B
fieldC = value02C
[key-03]
fieldA = value03
fieldB = value03B
fieldC = value03C
[key03-new]
fieldA = Nvalue03-1
fieldB = Nvalue03-2
fieldC = Nvalue03-3
filedH = somevalue
[key05]
fieldA = value04
fieldB = value05B
fieldC = value05C
filedD = othervalue
[key06]
fieldA = value06
fieldB = value06B
fieldC = value06C
Thanks is advance.