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
谢谢。顺便说一句,我不想将输出写入文件,此命令用于函数中,此命令的结果将由函数返回所以我应该在命令末尾删除文件吗?