Como encontrar palavras únicas em uma única linha

4

Eu tenho uma string que é algo como 50003 50003 50003 50001 que eu obtenho após o processamento em outro arquivo que é armazenado em uma variável. Agora eu quero dessa variável palavras únicas. Como 50003 50001 como fazer isso?

    
por Girija Joshi 13.12.2015 / 06:12

2 respostas

6

Você poderia canalizá-lo através de tr, sort, uniq, por exemplo, no prompt de comando, você pode testar isso:

 $ var1='50003 50003 50003 50001 50003'

Em seguida,

 $ echo $var1 | tr ' ' '\n' | sort | uniq
50001
50003

Como você pode ver, ele é exclusivo e o classifica caso você queira fazer alguma coisa com ele posteriormente, o que requer entrada classificada.

Atualizar

Para sua pergunta adicional nos comentários, se você deseja salvar os resultados em uma variável, você pode, no script:

var2="$( echo $var1 | tr ' ' '\n' | sort | uniq )"
  • $( ... ) é uma substituição de comando bash, substituindo o conteúdo de $(...) pelos comandos 'output

Então, mais tarde, no seu script, se você deseja gerar $var2 para o terminal, apenas:

echo "$var2"
  • coloque $var2 entre aspas para continuar a exibi-lo como uma linha por resultado
  • caso contrário sem aspas, echo por padrão interpreta cada "palavra" em $var2 como um argumento separado, irá gerar um por um separado por espaço, então você acaba com uma sentença longa.

Lembre-se também de que você pode salvar a saída em um arquivo como ~/unique_results.txt :

echo $var1 | tr ' ' '\n' | sort | uniq  > ~/unique_results.txt
  • > é o redirecionamento de arquivos, redireciona o padrão para o arquivo especificado
por 13.12.2015 / 06:47
0

Se isso estiver no bash, o seguinte imprimirá apenas as palavras uniq em uma variável armazenada chamada herpderp :

for w in $herpderp; do echo $w ; done | uniq
    
por 13.12.2015 / 06:24