用 awk 替换字段中最后一次出现的字符
Replace last occurrence of a character in a field with awk
我正在尝试用 awk 替换字段中最后一次出现的字符。给出的是这样一个文件:
John,Doe,Abc fgh 123,Abc
John,Doe,Ijk-nop 45D,Def
John,Doe,Qr s Uvw 6,Ghi
我想用逗号“,”替换最后一个 space“”,基本上将字段一分为二。结果应该如下所示:
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
我尝试创建一个变量,其中包含 space 在
字段中出现的次数
{var1=gsub(/ /,"",)}
然后整合到
{var2=gensub(/ /,",",var1,); print var2}
但是 gensub 中的 how-argument 不允许除数字和 G/g.
之外的任何字符
我找到了一个类似的线程 here 但无法针对我的问题调整解决方案。
我对此还很陌生,如有任何帮助,我们将不胜感激!
使用 GNU awk for gensub():
$ awk 'BEGIN{FS=OFS=","} {=gensub(/(.*) /,"\1,","",)}1' file
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
获取 Arnold Robbins 的 Effective Awk Programming 一书。
问题写得很好!
这里是短片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
根据 Eds 评论更新。
或者您可以使用 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
反转行,然后将第一个 space 替换为 ,
,然后再次反转。
我正在尝试用 awk 替换字段中最后一次出现的字符。给出的是这样一个文件:
John,Doe,Abc fgh 123,Abc
John,Doe,Ijk-nop 45D,Def
John,Doe,Qr s Uvw 6,Ghi
我想用逗号“,”替换最后一个 space“”,基本上将字段一分为二。结果应该如下所示:
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
我尝试创建一个变量,其中包含 space 在
字段中出现的次数{var1=gsub(/ /,"",)}
然后整合到
{var2=gensub(/ /,",",var1,); print var2}
但是 gensub 中的 how-argument 不允许除数字和 G/g.
之外的任何字符我找到了一个类似的线程 here 但无法针对我的问题调整解决方案。
我对此还很陌生,如有任何帮助,我们将不胜感激!
使用 GNU awk for gensub():
$ awk 'BEGIN{FS=OFS=","} {=gensub(/(.*) /,"\1,","",)}1' file
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi
获取 Arnold Robbins 的 Effective Awk Programming 一书。
问题写得很好!
这里是短片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
根据 Eds 评论更新。
或者您可以使用 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
反转行,然后将第一个 space 替换为 ,
,然后再次反转。