我正在尝试用awk替换字段中最后一个字符。给定的文件是这样的:
John,Doe,Abc fgh 123,Abc
John,Doe,Ijk-nop 45D,Def
John,Doe,Qr s Uvw 6,Ghi
我想用逗号“,”替换最后一个空格“”,基本上将字段分成两个。结果应该是这样的:
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
我尝试使用
创建一个变量,其中包含字段中出现的空格数{var1=gsub(/ /,"",$3)}
然后将其集成到
中{var2=gensub(/ /,",",var1,$4); print var2}
但是gensub中的how-argument不允许除数字和G / g之外的任何字符。
我找到了一个类似的帖子here但是无法使解决方案适应我的问题。
我对此很新,所以任何帮助都会受到赞赏!
答案 0 :(得分:3)
使用GNU awk for gensub():
$ awk 'BEGIN{FS=OFS=","} {$3=gensub(/(.*) /,"\\1,","",$3)}1' file
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
获取Arnold Robbins的有效Awk编程一书。
写得很好的问题顺便说一句!
答案 1 :(得分:1)
这是一个简短的awk
awk '{$NF=RS$NF;sub(" "RS,",")}1' file
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
或者您可以使用rev
工具。
rev file | sed 's/ /,/' | rev
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
反转该行,然后用,
替换第一个空格,然后再次反转。