Ciao, ho provato a risolvere il tuo problema e sono riuscito ad abbozzare un codice C che prende in input il un file con la redirezione del comando "ls -la" e gestisce gli spazi da aggiungere per otterene un output formattato secondo un altro stardard! Io ho lavorato su Ubuntu 10.04 in versione ancora alfa, e dal comando ls -la ottenevo una roba simile:
codice:
totale 24
drwxr-xr-x  2 thecrow thecrow 4096 2010-03-25 13:11 .
drwxrwxrwx 75 thecrow thecrow 4096 2010-03-25 13:10 ..
-rw-r--r--  1 thecrow thecrow    0 2010-03-25 13:11 in.txt
-rwxr-xr-x  1 thecrow thecrow 7578 2010-03-25 13:11 parsific
-rw-r--r--  1 thecrow thecrow 1165 2010-03-25 13:10 parsific.c
Non so perchè ma ottengo delle stringhe composte da 8 sottostringhe, invece quello che hai postato tu conta 9 sottostringhe, quindi...devi fare un cambiamento al mio codice che posto qua sotto:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ( int argc, char* argv[] )
{
	int vet[9] = {3,1,2,5,1,1,2,1,0};
	int k, i, max=0, off=0;
	char string[256];
	char str[64];
	int flag=0;
	FILE *in, *out;

    system("ls -la > in.txt");

	in = fopen ("in.txt","r");
	out = fopen (argv[1],"w");

    fscanf(in,"%*s%*s");

	while ( fscanf(in,"%*s %*s %*s %*s %s %*s %*s %*s %*s", str) != EOF ) {
	    if ( strlen(str) > max )
	        max = strlen(str);
	}
	printf ("%d\n", max);

    rewind(in);

	while ( feof(in) != 1 ) {

        if ( flag == 1 ) {

            for ( i=0; i<9; i++ ) {
                fscanf(in,"%s", str);
                if ( feof(in) == 1 ) return 1;
                fprintf(out,"%s", str);
                if ( i == 4 ) off = 4 - strlen(str);
                else off=0;
                k=0;
                while ( k < vet[i]+off ) {
                    fprintf(out," ");
                    k++;
                }

            }
            fprintf (out,"\n");
        }
        else {
            fgets (string,256,in);
            fprintf(out,"%s", string);
            flag = !flag;
        }
	}
	fcloseall();
	return 1;
}
Il programma funziona da riga di comando, prende automaticamente in input il file in.txt, in quanto lo crea tramite una chiamata a sistema:
codice:
 system("ls -la > in.txt");
e poi lo elabora e riscrive il tutto in un nuovo file, passato come parametro, con la nuova formattazione!
Per avviarlo da terminale ovviamente devi passare il nome del file d uscita!

Prova a vedere se funziona qualcosa, io ho fatto delle prove e in genere andava, però magari cambiando sistema o facendo delle prove particolari farà qualche capriccio! fammi sapere... ciaoo!