Après avoir cherché, lu et essayé des solutions possibles pour beaucoup de lignes grep
avec la list des templates, donc j'écris. C'est un très basique et j'ai participé à de nombreux forums.
Mais je suis coincé avec ce qui suit: J'ai deux files, je veux grep ces lignes de file plus grand, qui correspond au model de plus petit file.
J'ai un file_A.txt (une seule colonne list de templates à associer) comme:
comt241_c0_seq1 comt868_c0_seq1 comt685_c0_seq1 comt7977_c0_seq1 comt6723_c0_seq1 comt363_c0_seq1 comt384_c0_seq1
et un autre file_B.txt (onglet délimité, avec plus d'inputs 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
J'ai essayé grep -f file_A file_B > file_C
Mais il a renvoyé un file vide.
J'ai donc supprimé tous les espaces blancs de file_A en utilisant
sed 's/[ \t]*$//' file_A > new_file_A
mais n'a pas fonctionné. J'ai essayé beaucoup de choses pour enlever le caractère spécial ou l'espace et pour bien délimiter le file mais il m'a donné des inputs supplémentaires ou rien.
Je pense qu'il y a un caractère spécial dans file_A ou file_B, ce qui dérange. J'utilise l'éditeur de wrangler de text.
Y a-t-il une autre manière de grep de faire cela?
J'ai créé les deux files avec le même contenu que mentionné et utilisé grep
de la même manière et cela a bien fonctionné. J'espère que vous utilisez les mêmes noms de files (je vois l'extension .txt manquante dans la question).
[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 ~]$
Vous pouvez essayer dos2unix
sur les deux noms de files s'ils produisent toujours un file vide.
dos2unix file_A.txt dos2unix file_B.txt
Votre command grep semble correcte. Sauf que vous utilisez différents noms de files:
grep -f list_A list_B
au lieu 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