![为什么我的 awk 子命令失败了?](https://linux22.com/image/683688/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20awk%20%E5%AD%90%E5%91%BD%E4%BB%A4%E5%A4%B1%E8%B4%A5%E4%BA%86%EF%BC%9F.png)
当我跑步时
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 的任何文档。
df -hl | grep '/dev/disk1'
返回
/dev/disk1 112Gi 94Gi 18Gi 85% 24672655 4649071 84% /
据我了解,它应该返回已使用的磁盘空间百分比。
答案1
您只需删除一对反斜杠:
df -hl | grep '/dev/disk1' | awk '{sub(/%/, "");print $5}'
有充分的证据表明, Awksub
函数可以将作为第一个参数传递的模式的第一次出现替换为作为第二个参数传递的字符串。
这里的模式是百分号,替换字符串是空字符串。正如您的问题中所写,第二个参数是无效字符串,因此会awk
报错并退出。更正后的awk
语句是删除%
其输入中的出现并显示第五个字段。
注意grep
这里的命令是多余的,因为awk
可以单独进行过滤,所以命令可以简化为:
df -hl | awk '/\/dev\/disk1/ {sub(/%/, "");print $5}'