Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用awk替换字段中最后出现的字符_Regex_Bash_Awk - Fatal编程技术网

Regex 用awk替换字段中最后出现的字符

Regex 用awk替换字段中最后出现的字符,regex,bash,awk,Regex,Bash,Awk,我试图用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 我尝试创建一个变量,该变量包含字段中空格的出现次数 {va

我试图用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参数不允许除数字和G/G之外的任何字符

我发现了一个类似的线程,但无法使解决方案适应我的问题

我是一个新手,所以任何帮助都将不胜感激

带有GNU awk的gensub():

获得阿诺德·罗宾斯的《有效的Awk编程》一书


非常好的书面问题顺便说一句

这里是一个简短的
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

将行反转,然后将第一个空格替换为
,然后再次反转。

awk程序:
{n=gsub(//,“”,$3);newv=n?gensub(/,“,”,n,$3):newv;print newv;}
应该可以正常工作。是什么让你相信它没有呢?awk版本可能存在的一个问题是,该行将通过分配给$NF来重新构造自身,这可能会影响具有多个空格的行。类似于
John,Doe,Qr..s Uvw 6,Ghi
的内容将作为
John,Doe,Qr.s Uvw,6,Ghi
输出,而不是
John,Doe,Qr..s Uvw,6,Ghi
。(其中
Qr
s
之间的点是空格,否则会在注释中折叠,这有点讽刺)。当然,如果这不是输入的问题,那么最好避免只使用gensub和regexe!
rev file | sed 's/ /,/' | rev
John,Doe,Abc fgh,123,Abc
John,Doe,Ijk-nop,45D,Def
John,Doe,Qr s Uvw,6,Ghi