grep -f patternfile encontra nada ou muito dependendo do conteúdo do patternfile

1

Após pesquisar, ler e tentar possíveis soluções para muito sobre grep lines com a lista de padrões, por isso estou escrevendo. É eu sei um muito básico e foram atendidos em muitos fóruns.

Mas eu estou preso com o seguinte: Eu tenho dois arquivos, eu quero grep essas linhas de arquivo maior, que coincide com o padrão de arquivo menor.

Eu tenho um arquivo_A.txt (uma lista de coluna única de padrões a serem correspondidos) como:

comt241_c0_seq1
comt868_c0_seq1
comt685_c0_seq1
comt7977_c0_seq1
comt6723_c0_seq1
comt363_c0_seq1
comt384_c0_seq1

e outro file_B.txt (delimitado por tabulações, com mais entradas que file_A)

comp5_c0_seq1   0   0   0   6   0   0   0   0   0
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comp429_c0_seq1 0   0   0   0   0   0   0   0   0
comp452_c0_seq1 0   0   0   0   0   0   0   0   0
comp452_c0_seq2 0   0   0   0   0   0   0   0   0
comp483_c0_seq1 33  8   10  32  0   33  8   0   37
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comp494_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comp564_c0_seq1 0   0   0   0   0   0   0   0   0
comp596_c0_seq1 0   0   0   0   0   0   0   0   0
comp653_c0_seq1 10  0   0   2   0   0   0   0   0
comp724_c0_seq1 0   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0

Eu tentei grep -f file_A file_B > file_C

Mas retornou um arquivo vazio.

Então eu removi todos os espaços em branco do arquivo_A usando

sed 's/[ \t]*$//' file_A > new_file_A

mas não funcionou. Eu tentei muitas coisas para remover caracteres especiais ou espaço e para delimitar corretamente o arquivo, mas ele me deu entradas extras ou nada.

Eu acho que há algum caractere especial no arquivo_A ou no arquivo_B, o que está incomodando. Eu estou usando o editor de texto wrangler.

Existe outra maneira além do grep de fazer isso?

    
por Roli 03.12.2014 / 13:22

2 respostas

2

Eu criei os dois arquivos com o mesmo conteúdo mencionado e usei grep da mesma forma e funcionou bem. Espero que você esteja usando os mesmos nomes de arquivo (vejo a extensão .txt ausente na pergunta).

[sreeraj@server ~]$ grep -f file_A.txt file_B.txt > file_C.txt
[sreeraj@server ~]$ cat file_C.txt
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0
[sreeraj@server ~]$

Você pode tentar dos2unix em ambos os nomes de arquivos, se eles ainda estiverem produzindo um arquivo vazio.

dos2unix file_A.txt
dos2unix file_B.txt
    
por 03.12.2014 / 13:57
3

Seu comando grep parece correto. Exceto você está usando nomes de arquivos diferentes:

grep -f list_A list_B

em vez de

~$ grep -f fileA.txt fileB.txt
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0
    
por 03.12.2014 / 13:29