2010-07-14 7 views
3

Il y a 100 fichiers dans le répertoire et il y a 2 paires de fichiers.Comment faire la différence entre 2 fichiers dans un script shell

Je veux trouver la différence entre les 2 fichiers dans le script shell

File 1: 
Operating System : Windows XP 
Operating System : Windows NT 
Operating System : Windows 2008 

FILE 2: 
Windows XP 
Windows NT 
Windows2008 

(Windows 2008 par exemple (fichier 1) et Windows2008 (fichier2)).

Mais finalement les deux fichiers n'ont aucune différence.

Comment y parvenir?

Ces fichiers dans l'hôte linux et que vous voulez faire un script shell?

+0

Cette question est très floue.Est-ce 100 fichiers ou deux fichiers que vous voulez comparer? Que voulez-vous dire par "script shell"? C'est un terme Unix; Windows n'a que des scripts batch, command et PowerShell, sauf si vous utilisez un environnement de simulation Unix tel que Cygwin. –

+0

dans dir il y aura File1.host.pg1.txt et file1.host.pg2.txt et file1.host2.pg1.txt .... comme ça – Tree

+0

je veux faire dans linx – Tree

Répondre

2

Utilisons Perl et diff, allons-nous? cut ne fait pas tout le travail. En fidélité à votre commentaire original, je vais chercher le mot qui vient après "Widnows" dans chaque ligne d'entrée, et créer un nouveau fichier composé uniquement de ces mots. Ensuite, je vais comparer les fichiers.

Chaque fois que j'ai posté Perl, à chaque fois, j'ai été critiqué par un essaim de StackOverflowers. Alors, préparez-vous pour un mauvais Perl. Cela fonctionnera probablement. Ma réputation peut prendre les downvotes, et je veux vraiment être utile ici.

D'abord, le script Perl (appeler preparse.pl):

my $f = shift @ARGV; 
open FILE, "<$f" or die("Couldn't open file!"); 
while (<FILE>) { 
    print "$1\n" if $_ =~ /Widnows(\s?)*?(\S+)\s*/; 
} 

Maintenant, la commande que vous exécutez:

preparse.pl file1 > file1.tmp 
preparse.pl file2 > file2.tmp 
diff file1.tmp file2.tmp 

Ne hésitez pas à en faire un grand script Perl. Peu importe.

1

La question est trop imprécise, mais essayez ceci:

diff <(sed 's/Operating System : //' file1.txt) file2.txt 
2

Le diff utilitaire est sur la plupart des systèmes, et la sortie unifiée -u est le plus populaire.

$ diff -u file1 file2 
--- file1 2010-07-14 02:08:20.000000000 -0700 
+++ file2 2010-07-14 02:08:29.000000000 -0700 
@@ -1,3 +1,3 @@ 
-Operating System : Windows XP 
-Operating System : Windows NT 
-Operating System : Windows 2008 
+Windows XP 
+Windows NT 
+Windows2008 

Si vous voulez un mot par mot diff à la place, vous pouvez utiliser des outils moins communs tels que wdiff:

$ wdiff file1 file2 
[-Operating System :-]Windows XP 
[-Operating System :-] 
Windows NT 
[-Operating System : Windows 2008-] 
{+Windows2008+} 

Si vous voulez une vue plus évidente visuellement des différences de deux fichiers, vous pouvez utiliser des outils tels que xxdiff ou kdiff3 ou similaire. (Il y a beaucoup de trois voies de fusion des outils graphiques pour diff.)

Si vous voulez quelque chose qui pourrait être plus facile à utiliser par programme, le programme cmp peut lister tous les octets dif férences dans les fichiers:

$ cmp -l file1 file2 
1 117 127 
2 160 151 
3 145 156 
... 

cmp peut être plus utile sur des fichiers qui sont presque identiques.

1

J'utiliserais diff, diff3 si vous comparez 3 fichiers entre eux ou vimdiff.

Questions connexes