'Collect whitespace-separated fields from string list
Allows quick awk-like usage of string lists.
Example data (in var a, created by \'a = !ls -l\')::
-rwxrwxrwx  1 ville None      18 Dec 14  2006 ChangeLog
drwxrwxrwx+ 6 ville None       0 Oct 24 18:05 IPython
* ``a.fields(0)`` is ``[\'-rwxrwxrwx\', \'drwxrwxrwx+\']``
* ``a.fields(1,0)`` is ``[\'1 -rwxrwxrwx\', \'6 drwxrwxrwx+\']``
(note the joining by space).
* ``a.fields(-1)`` is ``[\'ChangeLog\', \'IPython\']``
IndexErrors are ignored.
Without args, fields() just split()\'s the strings.'

def fields(self, *fields):

    if (len(fields) == 0):
        return [el.split() for el in self]
    res = SList()
    for el in [f.split() for f in self]:
        lineparts = []
        for fd in fields:
            try:
                lineparts.append(el[fd])
            except IndexError:
                pass
        if lineparts:
            res.append('    '.join(lineparts))
    return res
