Awk &引用;致命:被零除的尝试“;在尝试替换字符串的一部分时
我有这样一句话:Awk &引用;致命:被零除的尝试“;在尝试替换字符串的一部分时,awk,Awk,我有这样一句话: first: val1 second: 6/Hi/how//I///, 5/Hi/how//you///, 8/Hi/how//she/// third: special first: val1 second: 6/I///, 5/you///, 8/she/// third: special 我只想要第二个字段。在第二个字段中,我需要second:之后的所有内容。使用此代码,我能够实现我的目标: awk -F '\t' '/seco
first: val1 second: 6/Hi/how//I///, 5/Hi/how//you///, 8/Hi/how//she/// third: special
first: val1 second: 6/I///, 5/you///, 8/she/// third: special
我只想要第二个字段。在第二个字段中,我需要second:
之后的所有内容。使用此代码,我能够实现我的目标:
awk -F '\t' '/second:/ { split($2, a, / /); print a[2] }'
现在我有这个:
6/Hi/how//I///, 5/Hi/how//you///, 8/Hi/how//she///
现在我想用/
替换/Hi/how/
,因此我的预期输出如下:
first: val1 second: 6/Hi/how//I///, 5/Hi/how//you///, 8/Hi/how//she/// third: special
first: val1 second: 6/I///, 5/you///, 8/she/// third: special
我将代码更改为:
awk -F '\t' '/second:/ { split($2, a, / /); gsub(//Hi/how///,"/",a[2]; print a[2] }'
但我遇到了这个错误:
awk: cmd. line:1: (FILENAME=- FNR=4) fatal division by zero attempted
awk: cmd. line:1: (FILENAME=- FNR=4) fatal division by zero attempted
awk: cmd. line:1: (FILENAME=- FNR=4) fatal division by zero attempted
怎么了?您可以使用此
awk
:
awk 'BEGIN{FS=OFS="\t"} $2 ~ /^second:/{ gsub(/\/Hi\/how\/\//, "/", $2) } 1' file
这里不需要使用split
。请注意在正则表达式中需要如何转义/
,因为/
是gsub
函数中的正则表达式分隔符
以下gsub
也将使用带引号的字符串而不是正则表达式:
gsub("/Hi/how//", "/", $2)
如果您的模式包含斜杠,请用双引号将其括起来。像
“/Hi/how//”
,而不是///Hi/how///code>@anubhava,这是一个打字错误。我编辑了这篇文章。@oguzismail,所以我的命令应该是这样的:awk-F'\t'/second://{split($2,a,//);gsub(“/Hi/how/”,“/”,a[2];print a[2]}“
?您预期的输出是什么?谢谢。如果我像您所说的那样编辑代码中的gsub部分,那么它也是一个正确的命令吗?在一个awk命令中使用多个由;
分隔的gsub是否正确?我想用-
替换。是否正确使用:awk'BEGIN{FS=OFS=“\t”}$2~/^second:/{gsub(/\/Hi\/how\/,“/”,$2);gsub(/,/,“-”,$2}1'文件
?我只想编辑6/Hi/how//I//,5/Hi/how//you//,8/Hi/how////
?不是[2]秒:6/Hi/how///I///5/Hi/how///you///8/Hi/how///she///code>是$2
,因此没有真正的理由调用split
。只需调用gsub
获取$2
谢谢。顺便说一句,我不想将输出写入文件,此命令用于函数中,此命令的结果将由函数返回所以我应该在命令末尾删除文件吗?