$ awk 'BEGIN { OFS="\t"; s=0 } /^[^[:blank:]]/ { print ++s "\b", $0; next } { print s, $0 }' file | sort -n | cut -f 2-
0ce Handle Bars
0cf Front Brake
0d0 Rear Brake
HUT 03 VR Controls
000 Unidentified
001 Belt
002 Body Suit
003 Flexor
004 Glove
005 Head Tracker
006 Head Mounted Display
007 Hand Tracker
008 Oculometer
009 Vest
00a Animatronic Device
020 Stereo Enable
021 Display Enable
HUT 04 Sport Controls
000 Unidentified
001 Baseball Bat
002 Golf Club
Здесь используется awk
для добавления номера (и разделителя табуляции )перед каждой строкой, соответствующей разделу, в котором находится эта строка. Для заголовков разделов мы добавляем число, за которым следует символ возврата. (только потому, что забой сортируется перед вкладками ). Затем мы просто сортируем полученные данные по этим числам, прежде чем удалить их и добавленные разделители табуляции.
Заголовки разделов обнаруживаются путем поиска не -пустых символов в начале строки.