awk merge two files

file1

AAA3:WWW1:DDD1:XXX8:DDD2:XXX9
AAA6:WWW2:FFF1:XXX130:FFF1:XXX104:FFF1:XXX16
AAA7:WWW3:ZZZ1:XXX4:ZZZ2:XXX5:ZZZ3:XXX6:ZZZ4:XXX7

file2

XXX8:EEE1:EEE2
XXX9:KKK1:KKK2
XXX130:OOO1:OOO2
XXX104:PPP1:PPP2
XXX16:RRR1:RRR1
XXX4:UUU1:UUU2
XXX5:III1:III2
XXX7:JJJ1:JJJ2

Result

AAA3:WWW1:DDD1:XXX8:EEE1:EEE2:DDD2:XXX9:KKK1:KKK2
AAA6:WWW2:FFF1:XXX130:OOO1:OOO2:FFF1:XXX104:PPP1:PPP2:FFF1:XXX16:RRR1:RRR1
AAA7:WWW3:ZZZ1:XXX4:UUU1:UUU2:ZZZ2:XXX5:III1:III2:ZZZ3:XXX6:NA:NA:ZZZ4:XXX7:JJJ1:JJJ2

Go through file1, find string XXX if found go to file2 and copy values after found string, If string not exist in second file inset "NA:NA"
Can someone help with some solution?

Test it!

awk 'NR==FNR {r[$1]=$0;next;} {for(i=1; i<=NF; i++) if( $i ~ /XXX/){ $i in r ? $i = r[$i] : $i = $i ":NA:NA"}; print $0}' FS=: OFS=: file2 file1 
1 Like

It's working, Thank you!