2

我真的是 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 ""
}

但我得到的输出如下:

test1;test2;test3;test4;test5;test6;;;

你能告诉我我做错了什么吗?而且,还有另一种简单的方法,比如 awk 中的单行代码来做到这一点?先感谢您

4

3 回答 3

5

我会在这个上使用 sed。基于问题是“替换第 4 个 ; 字符”,您可以使用以下命令:

sed 's/;/ /4' <inputfile>

这会将结果输出到标准输出,或者您可以使用“sed -i”来完成它。

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

于 2013-02-28T08:58:05.720 回答
3

试试这个 :

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

输出

test1;test2;test3;test4 test5;test6;test7
于 2013-02-28T08:56:22.647 回答
2

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

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

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

于 2013-02-28T09:13:16.680 回答