我似乎无法找到解决方案,这让我发疯。我知道我可以awk
用来打印一列。由于我的文件系统的排列方式,我在打印特定列时遇到了问题。
这是我运行时所拥有的df
:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_root-root
36623968 4484592 30278976 13% /
tmpfs 961312 0 961312 0% /dev/shm
/dev/sda1 516040 102896 386932 22% /boot
Run Code Online (Sandbox Code Playgroud)
如果 Iawk
对于 1K-blocks 列,由于文件系统位置的长度,它会从其他列返回值。基本上会发生这种情况:
1K-blocks
4484596
961312
516040
Run Code Online (Sandbox Code Playgroud)
如何列出正确的列信息?
如果您要通过管道df
输入awk
,请df -P
改用管道。它旨在易于解析,特别是不会断行。请记住跳过标题行 ( NR >= 2
)。
如果你需要用奇怪的换行符解析一些现有的输出,你可以告诉一个续行,因为它以空格开头。
awk '
NR==1 {next}
/^ / {print $1}
!/^ / {print $2}
'
Run Code Online (Sandbox Code Playgroud)
但是请注意,存在文件系统名称可以包含空格的 unix 变体(至少是 OSX——如果它是唯一一个在实践中发生这种情况,我不会感到惊讶),这使得任何基于列的解析都有问题(不幸的是,df -P
不使用制表符)。