One way with awk
:
$ awk '/^category/{c=$3}/^item/{print c,$0}' file
fruits item id 8837878
fruits item id 8837879
fruits item id 8837880
fruits item id 8837881
fruits item id 8837882
fruits item id 8837883
fruits item id 8837884
fruits item id 8837885
fruits item id 8837886
fruits item id 8837887
fruits item id 8837888
fruits item id 8837889
veg item id 8837890
veg item id 8837891
veg item id 8837892
veg item id 8837893
veg item id 8837894
veg item id 8837895
veg item id 8837896
veg item id 8837897
To format the output exactly how you need it you can use printf
:
$ awk '/^category/{c=$3}/^item/{printf "%s %s %s %d\n",c,$1,$2,$3}' file
So by tab separated output maybe you mean:
$ awk '/^category/{c=$3}/^item/{printf "%s %s %s\t%d\n",c,$1,$2,$3}' file