En gros, ce que je veux faire, c'est comparer deux fichiers par ligne et par colonne 2. Comment pourrais-je y parvenir ?
Fichier_1.txt :
User1 US
User2 US
User3 US
Fichier_2.txt :
User1 US
User2 US
User3 NG
Output_File :
User3 has changed
En gros, ce que je veux faire, c'est comparer deux fichiers par ligne et par colonne 2. Comment pourrais-je y parvenir ?
Fichier_1.txt :
User1 US
User2 US
User3 US
Fichier_2.txt :
User1 US
User2 US
User3 NG
Output_File :
User3 has changed
S'il n'y a pas besoin de savoir quelles parties des fichiers diffèrent, vous pouvez utiliser la somme de contrôle du fichier. Il y a plusieurs façons de le faire, en utilisant md5sum
o sha256sum
. En fait, chacun d'entre eux produit une chaîne de caractères à laquelle le contenu du fichier est associé. Si les deux fichiers sont identiques, leur hachage sera également le même. Cette méthode est souvent utilisée lorsque vous téléchargez des logiciels, comme les images iso d'installation d'Ubuntu. Ils sont souvent utilisés pour vérifier l'intégrité d'un contenu téléchargé.
Considérez le script ci-dessous, où vous pouvez donner deux fichiers comme arguments, et le fichier vous dira s'ils sont identiques ou non.
#!/bin/bash
# Check if both files exist
if ! [ -e "$1" ];
then
printf "%s doesn't exist\n" "$1"
exit 2
elif ! [ -e "$2" ]
then
printf "%s doesn't exist\n" "$2"
exit 2
fi
# Get checksums of eithe file
file1_sha=$( sha256sum "$1" | awk '{print $1}')
file2_sha=$( sha256sum "$2" | awk '{print $1}')
# Compare the checksums
if [ "x$file1_sha" = "x$file2_sha" ]
then
printf "Files %s and %s are the same\n" "$1" "$2"
exit 0
else
printf "Files %s and %s are different\n" "$1" "$2"
exit 1
fi
Exemple d'exécution :
$ ./compare_files.sh /etc/passwd ./passwd_copy.txt
Files /etc/passwd and ./passwd_copy.txt are the same
$ echo $?
0
$ ./compare_files.sh /etc/passwd /etc/default/grub
Files /etc/passwd and /etc/default/grub are different
$ echo $?
1
En outre, il y a comm
qui compare deux fichiers triés, et donne une sortie en 3 colonnes : colonne 1 pour les éléments uniques au fichier #1, colonne 2 pour les éléments uniques au fichier #2, et colonne 3 pour les éléments présents dans les deux fichiers.
Pour supprimer l'une ou l'autre des colonnes, vous pouvez utiliser les commutateurs -1, -2 et -3. L'utilisation de -3 fera apparaître les lignes qui diffèrent.
Ci-dessous, vous pouvez voir une capture d'écran de la commande en action.
Une seule condition est requise : les fichiers doivent être triés pour pouvoir être comparés correctement. sort
peut être utilisée à cette fin. Voici une autre capture d'écran, où les fichiers sont triés et ensuite comparés. Les lignes qui commencent à gauche appartiennent au Fichier_1 seulement, les lignes qui commencent à la colonne 2 appartiennent au Fichier_2 seulement.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.