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