为什么我的awk子命令失败?

当我跑步

df -hl | grep '/dev/disk1' | awk '{sub(/%/, \"\");print $5}' 

我收到以下错误:

 awk: syntax error at source line 1 context is {sub(/%/, >>> \ <<< "\");} awk: illegal statement at source line 1 

我似乎无法在awk sub上find任何文档。

 df -hl | grep '/dev/disk1' 

回报

 /dev/disk1 112Gi 94Gi 18Gi 85% 24672655 4649071 84% / 

据我所知,它应该返回使用的磁盘空间的百分比。

你只需要删除一对反斜杠:

 df -hl | grep '/dev/disk1' | awk '{sub(/%/, "");print $5}' 

awk sub被很好地logging,以取代作为第二个parameter passing的string作为第一个parameter passing的模式的第一次出现。

这里的模式是百分号,replacestring是一个空string。 正如它写在你的问题,第二个参数是一个无效的string,所以awk抱怨和退出。 已更正的awk语句将删除出现在其input中的%并显示第五个字段。

请注意, grep命令在这里是冗余的,因为awk可以单独进行过滤,所以命令可以简化为:

 df -hl | awk '/\/dev\/disk1/ {sub(/%/, "");print $5}'