Comment rechercher des lignes à l’aide de modèles dans un fichier sous UNIX

J’essaie d’utiliser un fichier .txt avec environ 5000 modèles (espacés avec une ligne) pour rechercher dans un autre fichier de 18000 lignes pour toutes les correspondances. Jusqu’à présent, j’ai essayé toutes les formes de grep et de awk que je peux trouver sur Internet et cela ne fonctionne toujours pas, alors je suis complètement déconcerté.

Voici un texte de chaque fichier.

Pattern.txt

rs2622590 rs925489 rs2798334 rs6801957 rs6801957 rs13137008 rs3807989 rs10850409 rs2798269 rs549182 

Il n’y a pas d’espace supplémentaire ou quoi que ce soit.

Fichier.txt

 snpid hg18chr bp a1 a2 zscore pval CEUmaf rs3131972 1 742584 AG 0.289 0.7726 . rs3131969 1 744045 AG 0.393 0.6946 . rs3131967 1 744197 TC 0.443 0.658 . rs1048488 1 750775 TC -0.289 0.7726 . rs12562034 1 758311 AG -1.552 0.1207 0.09167 rs4040617 1 769185 AG -0.414 0.6786 0.875 rs4970383 1 828418 AC 0.214 0.8303 . rs4475691 1 836671 TC -0.604 0.5461 . rs1806509 1 843817 AC -0.262 0.7933 . 

Le fichier.txt a été téléchargé directement depuis un répertoire med.

Je suis plutôt nouveau sur UNIX, donc toute aide serait incroyable!

Désolé edit: J’ai définitivement essayé toutes les choses que vous recommandiez et le résultat est vide. Est-ce que je manque peut-être un problème de syntaxe ou quelque chose dans mes fichiers texte?

PPS Je sais qu’il y a des correspondances car faire des travaux de greps individuels. Je vais déplacer cette question à unix.stackexchange. Merci pour vos réponses les gars je vais les essayer tous.

Problème résolu: J’utilisais évidemment des chariots DOS. Je n’en savais rien avant alors merci à tous ceux qui ont répondu. Pour les futurs utilisateurs qui rencontrent ce problème, voici la solution qui a fonctionné:

dos2unix *

awk ‘NR == FNR {p [$ 0]; next} $ 1 dans p’ Patterns.txt File.txt> Output.txt

idk si c’est ce que vous voulez ou non, mais cela imprimera toutes les lignes de File.txt dont le premier champ est égal à une chaîne de Patterns.txt:

 awk 'NR==FNR{p[$0];next} $1 in p' Patterns.txt File.txt 

Si ce n’est pas ce que vous voulez, dites-nous ce que vous voulez. Si c’est ce que vous voulez mais ne produit pas la sortie attendue, l’un des fichiers ou les deux contiennent des caractères de contrôle de création dans Windows, donc exécutez d’abord dos2unix ou similaire sur les deux.

Vous pouvez utiliser grep -Fw ici:

 grep -Fw -f Pattern.txt File.txt 

Les options utilisées sont:

  • -F – Recherche de chaîne fixe pour effectuer une entrée sans expression rationnelle
  • -w – Correspond uniquement aux mots entiers
  • -f file – Lecture d’un motif dans un fichier

Utilisez un script shell pour lire chaque ligne du fichier contenant vos patterns, puis réglez-le.

 #!/bin/bash FILENAME=$1 awk '{kount++;print $0}' $FILENAME | fgrep -f - PATTERNFILE.txt