我对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中还有另一个简单的方法可以做到这一点,比如一行代码?提前谢谢你
发布于 2013-02-28 16:58:06
在这一点上,我会选择sed。在问题是“替换第4个字符”的基础上,您可以使用以下命令:
sed 's/;/ /4' <inputfile>
这将把结果输出到标准输出,或者您可以使用"sed -i“就地输出结果。
请参阅http://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html
发布于 2013-02-28 16:56:23
试试这个:
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-28 17:13:17
如果你使用的是GNU awk,你可以使用一个类似于chooban建议的解决方案:
awk '{ $0=gensub(";", " ", "4") } 1'
最后的1
调用默认块:{ print $0 }
。
https://stackoverflow.com/questions/15131194
复制相似问题