Étant donné deux fichiers, je veux écrire un script shell qui lit chaque ligne de file1 et vérifie si elle est là dans file2. Si une ligne n'est pas trouvée, elle devrait produire deux fichiers différents et quitter. Les fichiers peuvent contenir des mots ou n'importe quoi. Par exemple :
fichier1:
Hi!
1234
5678
1111
hello
fichier2:
1111
5678
1234
Hi!
hello
Dans ce cas, deux fichiers doivent être égaux. si file2 a "bonjour !!!" au lieu de "bonjour" alors les fichiers sont différents. J'utilise le script bash. Comment puis-je faire ceci. Ce n'est pas important que je doive le faire dans une boucle imbriquée mais c'est ce que je pensais être le seul moyen. Merci de votre aide.
sort
ne se soucie pas du contenu exact, sauf si vous le lui dites.--brief
et ajouter des options de format, par exemple-u
.diff
définit son état de sortie pour indiquer si les fichiers sont identiques ou non. Le statut de sortie est accessible dans la variable spéciale$?
. Vous pouvez développer la réponse d'Ignacio de cette façon:la source
if diff ... >/dev/null
passer des crochets et de la variable.Ajouter cela parce que je pense que le [[]] && || la construction est assez soignée:
la source
Devrait également fonctionner:
Je pense que c'est assez de caractères pour une réponse ...
la source
Bien que ce
diff
soit une réponse parfaitement correcte, j'utiliserais probablement à lacmp
place ce qui est spécifiquement pour faire une comparaison octet par octet de deux fichiers.https://linux.die.net/man/1/cmp
Pour cette raison, il a l'avantage supplémentaire de pouvoir comparer les fichiers binaires.
Je suis amené à croire que c'est plus rapide que l'utilisation
diff
même si je n'ai pas personnellement testé cela.la source