compara dois arquivos obter lista idêntica

1

arquivo1.txt (50 linhas)

TERYUFV00000010753
TERYUFV00000009526 

arquivo2.txt (500 linhas)

TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target

Output.txt

TERYUFV00000010753 refids_11775_known_1/1_target
TERYUFV00000009526 refids_739_known_8/10_target

Compare file1.txt (tem 50 linhas) com file2.txt (tem 500 linhas), obtenha a lista de file2.txt que são idênticas a file1.txt.

Eu tentei os dois join & Comando fgrep e gera um arquivo vazio

    
por jack 07.09.2012 / 21:54

6 respostas

3

fgrep -f file1.txt file2.txt

Aqui estamos obtendo o padrão de pesquisa do arquivo1.txt e pesquisando no arquivo2.txt. À medida que o texto é corrigido, estamos usando fgrep para uma operação de pesquisa mais rápida.

    
por 07.09.2012 / 22:25
4

Quando você usa o join, as entradas em cada linha são como "células" em um banco de dados, mas elas devem ser classificadas, então você pode tentar,

sort file1.txt > file1_t.txt
sort file2.txt > file2_t.txt

E depois faça a junção

$ join file1_t.txt file2_t.txt

que lhe dará uma associação externa, ou seja, uma lista de todas as ocorrências das células em ambos os arquivos. Para reduzir esta lista apenas para as entradas em ambos os arquivos, canalize a saída do comando acima para uniq

$ join file1_t.txt file2_t.txt | uniq
    
por 09.09.2012 / 07:40
3

Você precisa sort antes de você join .

$ cat a.in
TERYUFV00000010753
TERYUFV00000009526
$ cat b.in
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target
$ join a.in b.in
$ join <(sort a.in) <(sort b.in)
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000010753 refids_11775_known_1/1_target
    
por 09.09.2012 / 17:35
1

Supondo que seus arquivos estejam classificados:

comm -12 file1 file2
    
por 07.09.2012 / 22:01
1

A linha a seguir funciona?

grep -iw -f file1.txt file2.txt

Se os arquivos foram enviados para o servidor a partir de um cliente Windows, talvez você deva executar o dos2unix primeiro.

dos2unix file1.txt file2.txt

Se os comandos acima não funcionarem, você pode tentar as seguintes linhas para ver se há caracteres extra não-imprimíveis no início ou no final das linhas em file1.txt. Os caracteres extra não imprimíveis nos itens do arquivo1.txt podem levar à falha do grep do arquivo2.txt.

cat -v file1.txt
sed -n -l file1.txt
    
por 09.09.2012 / 07:20
1

Você também pode resolver esse problema usando AWK :

NR == FNR {
    line[$1];
    next;
}
$1 in line {
    print $0;
}

Como um forro:

awk 'NR == FNR {line[$1]; next;} $1 in line' file1.txt file2.txt

Certifique-se de armazenar na memória o arquivo menor, ou seja, coloque-o como o primeiro argumento de um forro.

    
por 05.03.2016 / 02:08

Tags