2011-04-27 2 views
3

Je souhaite trouver chaque ligne d'un fichier contenant l'une des chaînes contenues dans une colonne d'un fichier différent.Utilisation de chaque ligne de sortie awk en tant que modèle grep

J'ai essayé
grep "$(awk '{ print $1 }' file1.txt)" file2.txt
mais juste sorties file2.txt dans son intégralité.

Je sais que j'ai déjà fait cela avec un motif que j'ai trouvé sur ce site, mais je ne trouve plus cette question.

+0

La commande dans l'OP fait ce qu'il est censé. Mon problème était que file1 avait une ligne vide qui envoyait le modèle "" à grep, l'amenant à trouver chaque ligne dans le fichier 2. – sans

Répondre

6

Je vois dans le commentaire de l'OP que peut-être la question n'est plus une question. Cependant, la légère modification suivante traitera la situation de ligne vide. Il suffit d'ajouter un chèque pour vous assurer que la ligne a au moins un champ:

grep "$(awk '{if (NF > 0) print $1}' file1)" file2 

Et si le fichier avec des motifs est simplement un ensemble de motifs par ligne, puis une version beaucoup plus simple de celui-ci est:

grep -f file1 file2 

Cela provoque grep d'utiliser les lignes dans le fichier 1 comme les modèles.

2

Il est inutile d'utiliser grep lorsque vous avez awk

awk 'FNR==NR&&NF{a[$0];next}($1 in a)' file2 file1 
Questions connexes