Usando awk , agindo sobre o número de campos
$ awk 'NF==1{print p "\t" $1; next} {p=$1} 1' ip.txt
john math
john science
paul math
paul science
rosy math
jill science
rob math
rob science
hary math
-
{p=$1} 1para linhas diferentes do campo único, salve a primeira coluna e imprima a linha -
NF==1{print p "\t" $1; next}se apenas um campo estiver presente, imprima campo anterior,tabe o campo da linha de entrada.nextpulará o restante das instruções e processará a próxima linha
Se tab separação não funcionar, use column
$ awk 'NF==1{print p,$1; next} {p=$1} 1' ip.txt | column -t
john math
john science
paul math
paul science
rosy math
jill science
rob math
rob science
hary math