-2
votes

Comment rechercher dans les fichiers et les découvertes de sortie uniquement s'ils correspondent à la fois à des fichiers

Je veux rechercher une chaîne (que je ne sais pas à moins que je ne regarde à l'intérieur des fichiers) sur la ligne de commande Linux.

Exemple:

  • un fichier 1 avec du texte à l'intérieur
  • Un fichier 2 avec du texte à l'intérieur
  • dans les deux fichiers le mot "pomme" existe.

    Je veux echo ce mot (qui existe dans les deux fichiers) dans un fichier ou stockez-le dans une variable.

    Comment est-ce possible?


3 commentaires

Que voulez-vous dire, vous voulez trouver tous les mots qui sont dans les deux fichiers?


Il devrait y avoir une comparaison entre ces fichiers et si le mot (dans mon exemple, "Apple" se trouve dans les deux fichiers) Je veux aller plus loin avec elle. Faites-en écho sur Commandline ou rangez-le dans une variable.


Un peu plus de spécifications serait utile. Les fichiers sont-ils un mot de cas fixe, pas de diacritique, pas de blanchiment et de ponctuation par ligne, ou ne voulez-vous faire quelque chose de complexité comme des textes «humains» avec des cas différents, des ponctuations ou des diacritiques etc.


4 Réponses :


-1
votes

Vous pouvez écrire le script pour gérer cela. Vous avez besoin d'un mot sur le fichier 1, dans la commande Grep Utilisez Grep (Grep -NWR "" -E "$ Word") pour trouver un mot dans le fichier 2. Si correspondez, écho un mot.


0 commentaires

0
votes

S'il n'y a pas de doublons blanchissez un seul fichier que vous pouvez utiliser fileau chat1 File2 | Trier | UNIQ -D


1 commentaires

Chaque ligne peut (très probablement) contenir plus d'un mot.



0
votes
$ cat input_one.txt 
FIREFOX a
FIREFOX b
Firefox a
firefox b

$ cat input_two.txt 
CHROME a
FIREFOX a
EXPLORER a

$ while read line; do grep "$line" input_two.txt ; done < input_one.txt 
FIREFOX a
Explanation:while will loop every line with input_two.txt file as input and will store the temporary line in the line variable.In every line will search for it in the input_one.txt file and -o option will make to print only the matched part.EDIT: See comments

5 commentaires

Il est vraiment inefficace d'appeler grep pour chaque ligne du fichier d'entrée. Et chaque ligne peut (très probablement) contenir plus d'un mot. Notez également que $ line est sujet à la scission de mots et qu'il sera interprété comme une regex par grep , pas comme une chaîne fixe.


@Pesathe à partir de plus que sur un mot que j'ai édité pour le soutenir.


Non, tu n'as pas vraiment. Mais il n'est pas clair de la question donc je ne me soucierais pas de cela spécifiquement.


convenu qu'il n'est pas clair de la question, mais pourquoi je ne suis pas?


La façon dont j'ai compris "mots" dans la question, prenons en compte deux fichiers un : firefox chrome et deux : explorateur \ nfirefox < / code>. Je m'attendrais à obtenir firefox . Réponse de Borrible , par exemple des résultats comme prévu.



2
votes

Vous pouvez obtenir une liste de tous les mots uniques d'un fichier utilisant: xxx pré>

-e '\ w +' code> correspond à des mots et -O code> sortira les pièces correspondantes. Nous pouvons ensuite utiliser la commande rejoindre code> qui identifie les lignes de correspondance dans deux fichiers, ainsi que la substitution de processus pour réussir les résultats de notre Word Finder: P>

join <(grep -o -E '\w+' filename1 | sort -u) <(grep -o -E '\w+' filename2 | sort -u)


0 commentaires