То, о чем вы просите, на самом деле не дерево, а график. В частности, это прямой ациклический график (DAG). Здесь это ссылка, говорящая о хранении DAG в реляционной базе данных.
Возможно, было бы проще просто пойти с традиционной древовидной структурой для категорий и позволить элементам быть в нескольких категориях с помощью таблицы ссылок на категории / категории.
В Linux у нас есть одна утилита, которая думает очень хорошо. Итак:
Следующее:
paste -d',' /tmp/1 /tmp/2 | column -t -N 'column-1,column-2' -s',' -o' '
выводит желаемый результат.