Bash AWK中的Substr在Ubuntu中返回空行
我对这条使用AWK的线路有问题Bash AWK中的Substr在Ubuntu中返回空行,bash,awk,Bash,Awk,我对这条使用AWK的线路有问题 apt缓存策略fish | awk'/Candidate/{print substr($2,0,1)} 在一台使用Ubuntu18.10的机器上,我得到了预期的结果3,但在另一台使用Ubuntu18.04的机器上,我得到了一行空的代码 在Ubuntu 18.04中: j@minimal:~$apt缓存策略鱼| awk'/Candidate/{print$2}' 2.7.1-3 j@minimal:~$apt缓存策略fish | awk'/Candidate/{p
apt缓存策略fish | awk'/Candidate/{print substr($2,0,1)}
在一台使用Ubuntu18.10
的机器上,我得到了预期的结果3
,但在另一台使用Ubuntu18.04
的机器上,我得到了一行空的代码
在Ubuntu 18.04中:
j@minimal:~$apt缓存策略鱼| awk'/Candidate/{print$2}'
2.7.1-3
j@minimal:~$apt缓存策略fish | awk'/Candidate/{print substr($2,0,1)}'
j@minimal:~$
在Ubuntu中18.10
krono@vulcania:~$apt缓存策略鱼| awk'/Candidate/{print$2}'
3.0.2-1~宇宙
krono@vulcania:~$apt缓存策略fish | awk'/Candidate/{print substr($2,0,1)}'
3.
krono@vulcania:~$
为什么在Ubuntu18.04中我得到一个空行而不是2
?定义substr
,如下所示:
substr(s,m[,n])
返回从位置m开始的最多n个字符的s子字符串,编号从1开始
这意味着,你的脚本是不正确的;字符串中没有零这样的位置。Ubuntu 18.04使用了一个旧版本的mawk,它不能处理substr
的这种用法(不过在以后的版本中已经修复了,请参阅)作为默认实现。因此,您需要使用:
substr($2,1,1)
定义substr
,如下所示:
substr(s,m[,n])
返回从位置m开始的最多n个字符的s子字符串,编号从1开始
这意味着,你的脚本是不正确的;字符串中没有零这样的位置。Ubuntu 18.04使用了一个旧版本的mawk,它不能处理substr
的这种用法(不过在以后的版本中已经修复了,请参阅)作为默认实现。因此,您需要使用:
substr($2,1,1)
在我18.04的时候很好用。我使用的是GNU awk 4.1.4。我没有Ubuntu,但试着在18.04第二段代码中更改一下substr($0,1,1)
?如果它的索引从1开始,我怀疑apt缓存结果在每个环境中都是不同的。尝试发布中间结果-例如,apt cache policy fish | awk'/Candidate/'
在我的18.04上运行良好。我使用的是GNU awk 4.1.4。我没有Ubuntu,但试着在18.04第二段代码中更改一下substr($0,1,1)
?如果它的索引从1开始,我怀疑apt缓存结果在每个环境中都是不同的。尝试发布中间结果-例如apt cache policy fish | awk'/Candidate/'