9

我正在尝试收集有关不同服务器上剩余空间量的信息。所以当我执行时,df -k我得到输出:

Filesystem  1024-blocks    Used     Avail Capacity  Mounted on
/dev/ad1s1f   125925198 2568970 113282214     2%    /builds

有时输出如下:

Filesystem           1K-blocks      Used Available Use% Mounted on
10.102.1.123:/storage/disk1/build
                     10735331328 10597534720 137796608  99% /buildbackup

现在我想获取可用磁盘空间上的数据。所以让我知道如何从特定列中获取数据。

4

2 回答 2

19

例如,您可以说:

df --output=source,avail

或者正如Tim Bunce所评论的那样,您可以使用--direct来防止长文件系统名称使该行一分为二。这会将文件系统显示为-.

来自man df

--输出[=FIELD_LIST]

使用 FIELD_LIST 定义的输出格式,如果省略 FIELD_LIST,则打印所有字段。

...

FIELD_LIST 是要包含的以逗号分隔的列列表。有效的字段名称为:'source'、'fstype'、'itotal'、'iused'、'iavail'、'ipcent'、'size'、'used'、'avail'、'pcent' 和 'target'(参见信息页面)。

- 直接的

显示文件而不是挂载点的统计信息

测试

$ df --output=source,avail
Filesystem               Avail
/dev/sda7            321675536
于 2015-03-02T11:56:35.763 回答
6

fedorqui 的解决方案更干净,但仅适用于 df

sed 's/ \+/ /g'更通用的方法是使用or将多个空格折叠为一个空格tr -s ' ',然后使用cut空格作为分隔符:cut -d" " -f 4 所以命令是:

df -k | tr -s ' ' | cut -d" " -f 4

结果是这样的:

Available
26027952
854220
68376208

同样的方法也适用于将数据输出到列的其他命令。例如ls -l | tr -s ' ' | cut -d" " -f 6,7,8 将从以下位置打印时间列ls -l

Dec 30 17:46
Mar 1 15:33
Mar 1 14:58
Mar 2 00:00
Jan 5 14:20
Mar 1 15:33
Feb 26 11:57
Feb 4 11:11
Mar 1 14:57
于 2015-03-02T12:05:20.620 回答