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

Replace 使用awk仅替换$4和$5之间的分隔符一次,replace,sed,awk,Replace,Sed,Awk,我是awk语言的新手,我对它的强大力量感到惊讶。(我今天发现了这一点),因为我有一个以下格式的文件: test1;test2;test3;test4;test5;test6;test7 我需要将其输出到新文件中,并获得以下结果: test1;test2;test3;test4 test5;test6;test7 基本上在$4和$5之间添加“”。我知道这方面有很多问题,但我不能做我想做的事 我正在测试我在这里找到的代码: for (i=1;i<=3;i++) print

我是awk语言的新手,我对它的强大力量感到惊讶。(我今天发现了这一点),因为我有一个以下格式的文件:

test1;test2;test3;test4;test5;test6;test7
我需要将其输出到新文件中,并获得以下结果:

test1;test2;test3;test4 test5;test6;test7
基本上在$4和$5之间添加“”。我知道这方面有很多问题,但我不能做我想做的事

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

   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 ""
}
你能告诉我妈妈我做错了什么吗?还有一种简单的方法,比如awk中的单行代码,可以做到这一点吗? 提前谢谢你

试试这个:

echo "test1;test2;test3;test4;test5;test6;test7" | awk -F';' '{
   for (i=1; i<=NF; i++)
        printf "%s%s", $i, (i == 4) ? " " : ";"
}'

在这件事上我会和塞德一起去。根据问题是“替换第四个字符”,您可以使用:

sed 's/;/ /4' <inputfile>
sed的/;//4' 
这将把结果输出到stdout,或者您可以使用“sed-i”就地执行


请参见

如果您正在使用GNU awk,您可以使用与chooban建议类似的解决方案:

 awk '{ $0=gensub(";", " ", "4") } 1'

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

您在哪里看到这个技巧?我第一次看到它时,oO“4”不是一个修饰语!?请点击sed的信息页面。第3.5节介绍了“s”命令。至少,这一次我是这么看的。我可能在第一次需要谷歌的时候就使用了它!感谢您的回复,您的代码运行良好!我的其他代码完全错了。实际上,我使用ChoobanOne是因为它更简单(只有一行)谢谢你的回答,但我只使用命令行(与SSH和Raspberry Pi xD进行远程工作)对吧,我有点累了!!
sed 's/;/ /4' <inputfile>
 awk '{ $0=gensub(";", " ", "4") } 1'