Como a classificação de linhas é mais fácil do que a classificação de colunas em uma linha, uma abordagem pode ser transpor cada linha (para que cada campo se torne uma linha), aplique sort e uniq e, em seguida, as reverta.
Aqui está uma implementação ingênua:
$ while read -r line; do echo $line | grep -o '[^ ]*' | sort -h | uniq | paste -s; done <file
Ele percorre o file e, para cada linha:
- Um
grepganancioso com a opção-o(imprime somente a parte correspondente de cada linha) divide sua entrada em linhas n , uma para cada substring correspondente. Aqui estamos combinando tudo, exceto para espaços em branco. - As linhas divididas são classificadas com a opção
-h, que compara números legíveis por humanos (se você quiser classificar seus campos como sequências alfanuméricas, remova-h). - O comando
uniqremove as duplicatas. -
paste -simprime cada linha da entrada padrão como campos de uma única linha separados por tabulações. Você pode anexar um| tr '\t' ' 'final para alterar as guias nos espaços.