J'ai une liste de 250 lignes. Je dois les exécuter tous via un serveur Web pour obtenir une liste de sortie. Cette liste, cependant, renvoie beaucoup plus de lignes que ce qui m'intéresse. Disons que ma list.txt
est:
a.1
b.1
etc
alors la sortie est output.txt
:
a.1 a b c
a.2 b a b
a.3 d k o
b.1 b o p
b.2 o i y
b.3 p i y
etc
Est-il possible d'utiliser la commande grep pour rechercher tous les mots dans list.txt dans le fichier output.txt et ensuite générer "la liste souhaitée" want.txt? J'ai besoin de la ligne entière dans mon output.txt Je suis nouveau dans les scripts, mais ce que j'aimerais, c'est quelque chose comme
grep list.txt output.txt > wanted.txt
Je n'ai pas pu trouver d'exemples de cela
Réponses:
J'ignorerais
grep
pour celui-ci. C'est bon pour les expressions régulières, mais il ne semble pas que vous en ayez vraiment besoin ici.comm
peut comparer deux fichiers et vous montrer des intersections. En utilisant vos exemples exacts:C'est plus rapide que n'importe quel grep mais cela dépend (fortement) des fichiers en cours de tri. S'ils ne le sont pas, vous pouvez les pré-trier, mais cela modifiera la sortie afin qu'elle soit également triée.
Alternativement, cette réponse de iiSeymour vous permettra de le faire avec
grep
. Les drapeaux demandent un fichier d'entrée et forcent une recherche à mot fixe sur une chaîne fixe. Cela ne dépendra pas de la commande mais sera basé sur laoutput.txt
commande. Inversez les fichiers si vous les souhaitez dans l'ordre du list.txt.Si votre
list.txt
est vraiment grand, vous pourriez avoir à aborder ce un peu plus itérativement et passer chaque ligne à grep séparément. Cela augmentera considérablement le temps de traitement. Dans ce qui précède, vousoutput.txt
lirez une fois, mais de cette façon, vous le lirez et le traiterez pour chaque ligne list.txt. C'est horrible ... Mais c'est peut-être votre seul choix. À la hausse, il trie ensuite les choses parlist.txt
ordre.la source
-1
supprime les lignes uniques au premier fichier,-2
supprime les lignes uniques au second fichier et-3
supprime les lignes communes aux deux. Pour obtenir juste les lignes communes, nous supprimons donc les uniques-12
.