Replace 使用awk仅替换$4和$5之间的分隔符一次
我是awk语言的新手,我对它的强大力量感到惊讶。(我今天发现了这一点),因为我有一个以下格式的文件: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
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'