【问题标题】:How to select a particular column in linux df command如何在linux df命令中选择特定列
【发布时间】:2015-05-02 18:24:23
【问题描述】:

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

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

【问题讨论】:

    标签: shell freebsd linux-disk-free


    【解决方案1】:

    你可以说:

    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
    

    【讨论】:

    • 当我在我的系统上执行上述命令时,会显示以下消息。 # df -k --output=source,Avail df: illegal option -- - usage: df [-b | -g | -H | -h | -k | -m | -P] [-aciln] [-t type] [file | filesystem ...]
    • 注意你需要说avail(小写)。如果这是一种类型并且问题仍然存在:您正在使用什么系统?
    • 我使用的机器是FreeBSD6.2
    • 你试过用avail代替Avail吗?
    • 是的,我试过了,输出和以前一样。 # df --output=source,avail df: illegal option -- - usage: df [-b | -g | -H | -h | -k | -m | -P] [-aciln] [-t type] [file | filesystem ...]
    【解决方案2】:

    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
    

    【讨论】:

    • 好吧,它只适用于df,因为问题是关于df :) 另外,请注意您可以使用tr -s ' '压缩空格
    • @fedorqui 我知道问题是关于 df 的,正如我所说,你的答案更好。但是,如果有人需要,我仍然想给出一个更笼统的答案。
    • 好点!但请注意,df 的问题在于,有时会获得如此大的文件系统,必须将其打印在两个不同的行中,而 sed 很难处理。
    • 当我执行上述命令时:df -k | sed 's/ \+/ /g' | cut -d" " -f 4 输出为空白。 # df -k . | sed 's/ \+/ /g' | cut -d" " -f4 # df -k . | sed 's/ \+/ /g'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2021-06-17
    • 2015-08-02
    • 2018-01-28
    相关资源
    最近更新 更多