Проблема с тем, что awk переписывает ваши поля, заключается в том, что выходные данные для измененных строк будут разделены полями с помощью OFS, что является статическим.замена строки на $0
.Вы можете вручную соединить части строки, например:
awk '{x=index($0,"msg:"); y=index(substr($0,x),";"); s=substr($0,x,y); gsub(/,/,"",s); print substr($0,1,x-1) s substr($0,x+y)}' input.txt
или прописать для удобства чтения:
{
x=index($0,"msg:") # find the offset of the interesting bit
y=index(substr($0,x),";") # find the length of that bit
s=substr($0,x,y) # clip the bit
gsub(/,/,"",s) # replace commas,
print substr($0,1,x-1) s substr($0,x+y) # print the result.
}