我在使用AWK的这条线时遇到问题
apt-cache policy fish | awk '/Candidate/ {print substr($2, 0, 1)}'
Run Code Online (Sandbox Code Playgroud)
在使用Ubuntu的计算机上,18.10我得到了3预期的结果,但是在使用Ubuntu的另一台计算机上,18.04我得到了empty一条代码。
在Ubuntu 18.04中:
j@minimal:~$ apt-cache policy fish | awk '/Candidate/ {print $2}'
2.7.1-3
j@minimal:~$ apt-cache policy fish | awk '/Candidate/ {print substr($2, 0, 1)}'
j@minimal:~$
Run Code Online (Sandbox Code Playgroud)
在Ubuntu中 18.10
krono@vulcania:~$ apt-cache policy fish | awk '/Candidate/ {print $2}'
3.0.2-1~cosmic
krono@vulcania:~$ apt-cache policy fish | awk '/Candidate/ {print substr($2, 0, 1)}'
3
krono@vulcania:~$
Run Code Online (Sandbox Code Playgroud)
为什么在Ubuntu 18.04中我得到一个空行而不是2?
POSIX awk规范定义substr如下:
substr(s,m [,n])
返回从位置m开始的s的最多n个字符的子字符串,从1开始。...
这意味着您的脚本不正确;字符串中不存在零位置。Ubuntu 18.04使用了旧版本的mawk,它不能处理这种用法substr(尽管在其他版本中已修复,请参见mawk changelog#20090726)作为默认实现。因此,您需要使用:
substr($2,1,1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |