J'ai deux fichiers dans lesquels certaines lignes ont changé d'ordre. J'aimerais pouvoir les comparer.
Un site Web a suggéré quelque chose qui ressemble à ceci:
diff <(sort text2) <(sort text1)
Mais cela donne l'erreur: Nom manquant pour la redirection.
J'utilise tcsh. La commande ci-dessus est-elle pour un autre shell?
Y a-t-il une meilleure façon?
Cette syntaxe de redirection est spécifique à bash. Ainsi, cela ne fonctionnera pas dans tcsh.
Vous pouvez appeler bash et spécifier directement la commande:
bash -c 'diff <(sort text2) <(sort text1)'
Voici une fonction pour cela:
function diffs() {
diff "${@:3}" <(sort "$1") <(sort "$2")
}
Appelez ça comme ceci:
diffs file1 file2 [other diff args, e.g. -y]
Vraisemblablement, vous pouvez le modifier selon la réponse de David Schmitt si nécessaire.
Y a-t-il une meilleure façon?
Oui il y a.
Utilisez l'utilitaire comm
:
utilisation: comm [-123i] file1 file2
Si cela ne fonctionne pas pour votre Shell, faites-le simplement en 3 lignes:
sort text1 > text1.sorted
sort text2 > text2.sorted
diff text1.sorted text2.sorted
Simple mais devrait fonctionner ...
Le problème avec votre 'diff' posté est que diff
ne peut recevoir que n fichier via stdin
. Je pense donc que vous devrez écrire au moins un fichier trié dans un fichier temporaire.
diff - file.txt
diffère stdin par rapport à un fichier.txt. Le "-" représente stdin
EDIT: J'avais supposé que la substitution de processus fonctionnerait via stdin. Mais ce n'est pas le cas et ce qui précède passe par /dev/fd/{num}
comme indiqué par VardhanDotNet ci-dessus.