Il y a deux fichiers appelés "a.txt" et "b.txt" ont tous les deux une liste de mots. Maintenant, je veux vérifier quels mots sont extra dans "a.txt" et ne sont pas dans "b.txt".
J'ai besoin d'un algorithme efficace car je dois comparer deux dictionnaires.
Voici ma solution pour cela:
mkdir temp
mkdir results
cp /usr/share/dict/american-english ~/temp/american-english-dictionary
cp /usr/share/dict/british-english ~/temp/british-english-dictionary
cat ~/temp/american-english-dictionary | wc -l > ~/results/count-american-english-dictionary
cat ~/temp/british-english-dictionary | wc -l > ~/results/count-british-english-dictionary
grep -Fxf ~/temp/american-english-dictionary ~/temp/british-english-dictionary > ~/results/common-english
grep -Fxvf ~/results/common-english ~/temp/american-english-dictionary > ~/results/unique-american-english
grep -Fxvf ~/results/common-english ~/temp/british-english-dictionary > ~/results/unique-british-english
si vous avez installé vim, essayez ceci:
vimdiff file1 file2
ou
vim -d file1 file2
vous le trouverez fantastique.
Triez-les et utilisez comm
:
comm -23 <(sort a.txt) <(sort b.txt)
comm
compare les fichiers d'entrée (triés) et génère par défaut trois colonnes: les lignes uniques à a, les lignes uniques à b et les lignes présentes dans les deux. En spécifiant -1
, -2
et/ou -3
, vous pouvez supprimer la sortie correspondante. Par conséquent, comm -23 a b
répertorie uniquement les entrées uniques à a. J'utilise la syntaxe <(...)
pour trier les fichiers à la volée. S'ils sont déjà triés, vous n'en avez pas besoin.
Essayez sdiff
(man sdiff
)
sdiff -s file1 file2
Vous pouvez utiliser l'outil diff
sous Linux pour comparer deux fichiers. Vous pouvez utiliser les options - modified-group-format et - unchanged-group-format pour filtrer les données requises.
Les trois options suivantes peuvent être utilisées pour sélectionner le groupe approprié pour chaque option:
'% <' récupère les lignes de FILE1
'%>' récupère les lignes de FILE2
'' (chaîne vide) pour supprimer les lignes des deux fichiers.
E.g: diff --changed-group-format = "% <" --unchanged-group-format = "" fichier1.txt fichier2.txt
[root@vmoracle11 tmp]# cat file1.txt
test one
test two
test three
test four
test eight
[root@vmoracle11 tmp]# cat file2.txt
test one
test three
test nine
[root@vmoracle11 tmp]# diff --changed-group-format='%<' --unchanged-group-format='' file1.txt file2.txt
test two
test four
test eight
Si vous préférez le style de sortie diff de git diff
, vous pouvez l'utiliser avec l'indicateur --no-index
pour comparer des fichiers ne se trouvant pas dans un référentiel git:
git diff --no-index a.txt b.txt
À l'aide de quelques fichiers contenant chacun environ 200 000 chaînes de noms de fichiers, j'ai analysé (avec la commande intégrée time
_) cette approche par rapport à d'autres réponses ici:
git diff --no-index a.txt b.txt
# ~1.2s
comm -23 <(sort a.txt) <(sort b.txt)
# ~0.2s
diff a.txt b.txt
# ~2.6s
sdiff a.txt b.txt
# ~2.7s
vimdiff a.txt b.txt
# ~3.2s
comm
semble être de loin le plus rapide, tandis que git diff --no-index
semble être l'approche la plus rapide pour une sortie de type diff.
Mise à jour 2018-03-25 Vous pouvez réellement omettre l'indicateur --no-index
sauf si vous vous trouvez dans un référentiel git et souhaitez comparer les fichiers non suivis à l'intérieur de celui-ci. dépôt. De les pages de manuel :
Ce formulaire permet de comparer les deux chemins donnés sur le système de fichiers. Vous pouvez omettre l'option --no-index lorsque vous exécutez la commande dans un arbre de travail contrôlé par Git et qu'au moins l'un des chemins pointe en dehors de l'arbre de travail, ou lorsque vous exécutez la commande en dehors d'un arbre de travail contrôlé par Git.
Vous pouvez également utiliser: colordiff : Affiche le résultat de diff avec des couleurs.
À propos de vimdiff : Il vous permet de comparer des fichiers via SSH, par exemple:
vimdiff /var/log/secure scp://192.168.1.25/var/log/secure
Extrait de: http://www.sysadmit.com/2016/05/linux-diferencias-entre-dos-archivos.html
De plus, n'oubliez pas mcdiff - Afficheur de diff interne de GNU Midnight Commander .
Par exemple:
mcdiff file1 file2
Prendre plaisir!
Utilisez comm -13
(nécessite des fichiers triés):
$ cat file1
one
two
three
$ cat file2
one
two
three
four
$ comm -13 <(sort file1) <(sort file2)
four