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
grep
ganancioso 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
uniq
remove as duplicatas. -
paste -s
imprime 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.