How to select a particular column in linux df command

17,851

Solution 1

You can for example say:

df --output=source,avail

Or as commented by Tim Bunce, you can use --direct to prevent the long filesystem name make the line split in two. This will show the filesystem as -.

From man df:

--output[=FIELD_LIST]

use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted.

...

FIELD_LIST is a comma-separated list of columns to be included. Valid field names are: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent' and 'target' (see info page).

--direct

show statistics for a file instead of mount point

Test

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

Solution 2

fedorqui's solution is cleaner, but only works for df

A more general approach is to collapse multiple spaces to a single space using sed 's/ \+/ /g' or tr -s ' ', then use cut with spaces as delimiters: cut -d" " -f 4 So the command is:

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

Which results in something like this:

Available
26027952
854220
68376208

The same approach will work with other commands that output data to columns. For instance ls -l | tr -s ' ' | cut -d" " -f 6,7,8 will print the time columns from 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
Share:
17,851
Ram Krishna
Author by

Ram Krishna

I am working as DevOps Engineer. I love to play around with scripting languages. And always look forward to learn new things.

Updated on June 14, 2022

Comments

  • Ram Krishna
    Ram Krishna almost 2 years

    I am trying to collect information on the amount of space left on different servers. So when I execute df -k i get output as:

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

    And sometimes the output comes as :

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

    Now I want to fetch data on the disk space available. So let me know how to fetch data from a particular column.