If walking the file twice is not a (big) problem (will store only one line in memory):
awk -F : '{printf("%s\t ", $1)}' infile
echo
awk -F : '{printf("%s\t ", $2)}' infile
Which, for a general count of fields would be (which could have many walks of the file):
#!/bin/bash
rowcount=2
for (( i=1; i<=rowcount; i++ )); do
awk -v i="$i" -F : '{printf("%s\t ", $i)}' infile
echo
done
But for a really general transpose, this will work:
awk '$0!~/^$/{ split($0,arr,/:/);
for (j in arr) { out[NR,j]=arr[j]; }
}
{ if (maxr<j){ maxr=j} } # max number of output rows.
END {
maxc=NR # max number of output columns.
for (j=1; j<=maxr; j++) {
for (i=1; i<=maxc; i++) {
printf( "%s \t", out[i,j]) ### The out field separator.
}
printf( "%s\n","" )
}
}' infile
And to make it pretty (use : as out filed separator) :
./script | column -t -s :
Virtual_Machine ID Status Memory Uptime Server Pool HA VCPU Type OS
OL6U7 0004fb00000600003da8ce6948c441bd Running 65536 17103 MyOVS1.vmworld.com HA-POOL false 16 Xen PVM Oracle Linux 6
The code above for a general transpose will store the whole matrix in memory.
That could be a problem for really big files.