首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用awk仅替换$4和$5之间的分隔符一次

使用awk仅替换$4和$5之间的分隔符一次
EN

Stack Overflow用户
提问于 2013-02-28 16:52:04
回答 3查看 874关注 0票数 2

我对awk语言真的很陌生,我对它所拥有的强大功能感到惊讶。(我今天发现了这一点),因为我有一个这种格式的文件:

代码语言:javascript
运行
复制
test1;test2;test3;test4;test5;test6;test7

我需要将其输出到一个新文件中,并将其作为结果:

代码语言:javascript
运行
复制
test1;test2;test3;test4 test5;test6;test7

基本上在$4和$5之间加上‘’。我知道有很多关于这方面的问题,但是我不能做我想做的事情。

我正在测试我在这里找到的代码:

代码语言:javascript
运行
复制
   for (i=1;i<=3;i++)
      printf "%s;", $i

   n = split($0,tmp,/  +/)

   for (i=6;i>=8;i++)
      printf ";%s", tmp[n-i]

   print ""
}

但我得到的输出类似于:

代码语言:javascript
运行
复制
test1;test2;test3;test4;test5;test6;;;

你能告诉我我哪里做错了吗?而且,在awk中还有另一个简单的方法可以做到这一点,比如一行代码?提前谢谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 16:58:06

在这一点上,我会选择sed。在问题是“替换第4个字符”的基础上,您可以使用以下命令:

代码语言:javascript
运行
复制
sed 's/;/ /4' <inputfile>

这将把结果输出到标准输出,或者您可以使用"sed -i“就地输出结果。

请参阅http://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html

票数 5
EN

Stack Overflow用户

发布于 2013-02-28 16:56:23

试试这个:

代码语言:javascript
运行
复制
echo "test1;test2;test3;test4;test5;test6;test7" | awk -F';' '{
   for (i=1; i<=NF; i++)
        printf "%s%s", $i, (i == 4) ? " " : ";"
}'

输出

代码语言:javascript
运行
复制
test1;test2;test3;test4 test5;test6;test7
票数 3
EN

Stack Overflow用户

发布于 2013-02-28 17:13:17

如果你使用的是GNU awk,你可以使用一个类似于chooban建议的解决方案:

代码语言:javascript
运行
复制
 awk '{ $0=gensub(";", " ", "4") } 1'

最后的1调用默认块:{ print $0 }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15131194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档