Question: 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.

Answer: 
You can for example say:

```
df --output=source,avail

```

Or as commented by [Tim Bunce](https://stackoverflow.com/questions/19703621/get-free-disk-space-with-df-to-just-display-free-space-in-kb/19703644#comment43896106_19703644), 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

```
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

```