Como eu posso fazer este comando no linux some (sort -u command) [duplicate]

0

Eu tenho dois arquivos com o conteúdo de algumas palavras.

Exemplo

arquivo1, ele tem 10 palavras:

world
earth
eye
ear
near 
from 
going
want
we 
our

O segundo arquivo2 tem 7 palavras:

world
earth
eye
ear
near 
going
want

Eu quero a saída como terceiro arquivo para as palavras que não existem no arquivo2.

por exemplo (de, nosso, nós) não existe no arquivo2.

    
por Fahad 30.10.2017 / 08:27

2 respostas

3

Apenas faça

grep -vFxf file2 file1 > file3

Isso retornará as linhas que não existem no arquivo2, mas no arquivo1 e grava o resultado no arquivo3.

  • -v , correspondência reversa, aqui significa que essas linhas existem apenas no arquivo2. Sem -v , ele retornará as linhas existentes nos dois arquivos.

  • -F , isso indica que grep corresponde ao padrão como uma sequência de padrão fixo em vez de regex (expressões regulares)

  • -x , corresponde à linha inteira como string de padrão

  • -f , lendo os padrões de um arquivo

Ou pelo título da sua pergunta e o comando que você referiu a esse sort -u , parece que você deseja que essas palavras únicas (na verdade, linhas) existam no arquivo1 ou no arquivo2. então você só precisa.

uniq -u <(sort file1 file2) > file3
    
por 30.10.2017 / 08:37
2

Outra solução:

comm -23 <(sort file1) <(sort file2) > file3

O -23 irá suprimir as linhas contidas em apenas arquivo2 ou em ambos os arquivos.

    
por 30.10.2017 / 09:04