如何在linux df命令中选择特定列

时间:2015-03-02 11:53:01

标签: shell freebsd df

我正在尝试收集有关不同服务器上剩余空间量的信息。因此,当我执行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

现在我想获取可用磁盘空间的数据。因此,请告诉我如何从特定列中获取数据。

2 个答案:

答案 0 :(得分:9)

例如,您可以说:

df --output=source,avail

或者如Tim Bunce所述,您可以使用--direct来防止长文件系统名称将行拆分为两行。这会将文件系统显示为-

来自man df

  

<强> - 输出[= FIELD_LIST]

     

使用FIELD_LIST定义的输出格式,或者打印所有字段if   FIELD_LIST被省略。

     

...

     

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

     

<强> - 直接

     

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

测试

$ df --output=source,avail
Filesystem               Avail
/dev/sda7            321675536

答案 1 :(得分:5)

fedorqui的解决方案更清洁,但仅适用于df

更通用的方法是使用sed 's/ \+/ /g'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