awkでソートせずに重複行を消せますが空行だけ残せませんかね?
連続空行はcatを使うので
×$ printf "%s\n" 1 "" "" 1 "" 2 "" 3 "" | awk '!a[$0]++'
1

2
3
○$ printf "%s\n" 1 "" "" 1 "" 2 "" 3 "" | CMD | cat -s
1

2

3

こんな風に