我在 ubuntu 12.04 上的 bash 脚本中有这个变量,它设置为显示根分区上的可用 MB:
AV_MB=$(df -m |awk NR==2 |awk '{print $4}')
有没有一种优雅的方式将这两个 awk 表达式组合成一个?或者使用 sed 或 grep 或 cut 的更短方法?
答案1
Awk 适用于“pattern {action}”模型,因此您可以将这两个过程组合成一个正确的过程:
df -m | awk 'NR==2 {print $4}'
然而,这是脆弱的,因为第二条记录可能会发生变化(在我的系统上,根记录是第三行),因此您可以匹配根文件系统记录的最后一个字段,如下所示:
df -m | awk '$NF == "/" {print $4}'
这可确保您的图案与df
打印的任何位置相匹配/
。
答案2
由于您知道要查找的分区,因此只需在df
命令中指定它即可:
df -m /
此外,您还可以使用该--output
选项来定义要显示的列。在本例中,“可用”,即
df -m --output=avail /
从man df
:
--输出[=FIELD_LIST]
使用由FIELD_LIST定义的输出格式,或者如果省略FIELD_LIST则打印所有字段。
...
FIELD_LIST 是要包含的以逗号分隔的列列表。有效的字段名称为:'source'、'fstype'、'itotal'、'iused'、'iavail'、'ipcent'、'size'、'used'、'avail'、'pcent' 和 'target'(请参阅信息页)。
但请注意,此--output
选项可能仅在 GNU 中可用。此外,它还打印标题,因此您可能需要通过管道tail -1
获取最后一行。