GNU/Linux >> Tutoriels Linux >  >> Linux

Outil pour obtenir les lignes d'un fichier qui ne sont pas dans un autre ?

Existe-t-il un outil capable d'obtenir des lignes contenues dans le fichier A, mais pas dans le fichier B ? Je pourrais faire un petit script simple avec, par exemple, perl, mais si quelque chose comme ça existe déjà, je vais gagner du temps à partir de maintenant.

Réponse acceptée :

Oui. Le grep standard outil de recherche de fichiers pour les chaînes de texte peut être utilisé pour soustraire toutes les lignes d'un fichier d'un autre.

grep -F -x -v -f fileB fileA

Cela fonctionne en utilisant chaque ligne dans fileB comme modèle (-f fileB ) et le traiter comme une chaîne simple pour correspondre (pas une regex régulière) (-F ). Vous forcez la correspondance sur toute la ligne (-x ) et n'affiche que les lignes qui ne correspondent pas (-v ). Par conséquent, vous imprimez les lignes du fichier A qui ne contiennent pas les mêmes données que n'importe quelle ligne du fichier B.

L'inconvénient de cette solution est qu'elle ne tient pas compte de l'ordre des lignes et si votre entrée comporte des lignes en double à différents endroits, vous risquez de ne pas obtenir ce que vous attendez. La solution à cela est d'utiliser un véritable outil de comparaison tel que diff . Vous pouvez le faire en créant un fichier diff avec la valeur de contexte à 100 % des lignes du fichier, puis en l'analysant uniquement pour les lignes qui seraient supprimées lors de la conversion du fichier A en fichier B. (Notez également que cette commande supprime la mise en forme diff après avoir obtenu les bonnes lignes.)

diff -U $(wc -l < fileA) fileA fileB | sed -n 's/^-//p' > fileC

Linux
  1. La différence entre une commande intégrée et une qui ne l'est pas ?

  2. Quand reçoit-on le message d'erreur "jobs :Not Found" ?

  3. Comment utiliser les lignes d'un fichier comme arguments d'une commande ?

  4. Recherche du contenu d'un fichier dans un autre fichier

  5. Comment obtenir le répertoire absolu d'un fichier dans bash ?

5 façons de compter le nombre de lignes dans un fichier

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Comment obtenir les adresses MAC des appareils qui ne sont pas dans le réseau

Changer l'ordre des lignes dans un fichier

Comment obtenir la taille physique d'un fichier sous Linux ?

Comment obtenir des lignes contenant une chaîne dans un fichier ?