Question

Supposons que j'ai deux listes de nombres dans les fichiers f1, f2, chaque numéro un par ligne. Je veux voir combien de nombres dans la première liste ne sont pas dans la seconde et vice versa. Actuellement, j'utilise grep -f f2 -v f1, puis je le répète à l'aide d'un script shell. C'est assez lent (le temps quadratique fait mal). Y a-t-il un moyen plus agréable de faire cela?

Était-ce utile?

La solution

J'aime 'comm' pour ce genre de chose. (les fichiers doivent être triés.)

$ cat f1
1
2
3
$ cat f2
1
4
5
$ comm f1 f2
        1
2
3
    4
    5
$ comm -12 f1 f2
1
$ comm -23 f1 f2
2
3
$ comm -13 f1 f2
4
5
$ 

Autres conseils

Ne pourriez-vous pas simplement mettre chaque nombre sur une seule ligne puis diff (1) les? Vous devrez peut-être trier les listes au préalable, mais pour que cela fonctionne correctement.

Dans le cas particulier où un fichier est un sous-ensemble de l'autre , les éléments suivants:

cat f1 f2 | sort | uniq -u

listerait les lignes uniquement dans le fichier plus volumineux. Et bien sûr, la canalisation vers wc -l indiquera le nombre.

Cependant, ce n'est pas exactement ce que vous avez décrit.

Ce one-liner répond souvent à mes besoins particuliers, mais j'aimerais voir une solution plus générale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top