2013-10-16 6 views
1

J'ai une situation, où j'ai un fichier source et un fichier cible, censé être similaire. Le fichier source contient des ensembles d'informations comme ci-dessous. J'ai besoin de comparer chaque ensemble d'informations dans les fichiers source et cible. Si quelque chose manque dans le fichier Cible, j'ai besoin d'écrire la ligne dans le fichier cible. J'aurais pu faire correspondre ligne par ligne, mais les ensembles de fichiers source et cible ne sont pas dans l'ordre. S'il vous plaît aidez-moi comment réaliser en utilisant un script shell.Unix Shell Scripting

Fichier source:

[Set.1] 
value=1 
date=today 

[Set.2] 
value=2 
date=today 

Fichier cible:

[Set.2] 
value=2 

[Set.1] 
value=1 
date=today 

Si vous pouvez le voir, la date est manquante dans [SEt.2] du fichier cible, donc, je dois le copier à partir Fichier source.

+0

Les données des deux fichiers seront-elles identiques ou seul le modèle sera le même – suhas

+0

Les données seront les mêmes. Nous devons enfin combler les lacunes pour les rendre identiques. – user1999315

Répondre

0

par la commande ci-dessous le fichier_set2 et file_set1 seront comparés si quelque chose manquant dans file_set2 est présent dans file_set1 sera recopié dans file_set2.

awk 'FNR==NR{a[$0];next}!($0 in a)' file_set2 file_set1 >>file_set2 
+0

Cela ne fonctionnera pas car la ligne 'date = today' est présente dans les deux fichiers mais pas dans les deux emplacements où elle est nécessaire dans file_set2. – msw

0

vous pouvez essayer d'utiliser rsync

rsync /target/file/path /source/file/path 
+0

Bonjour, rsync semble être une option facile, mais mon fichier src est une sorte de fichier delta. tgt_file contient plus d'informations avec des champs manquants, qui peuvent être trouvés dans les fichiers src-delta. J'ai juste besoin de copier le contenu de src_file, tout en gardant intacte, le fichier target_file. – user1999315

0

C'est soit un problème très facile ou un disque. Si vous avez juste besoin de faire les fichiers identiques, alors

cp source_file target_file 

suffirait. Mais il semble que vous voulez garder l'ordre des sections dans target_file inchangé. Cela vous obligera à analyser les fichiers en premier et rappelez-vous l'ordre des sections.

Comme il s'agit d'un format de fichier Windows INI, l'ordre des sections ne doit pas être significatif pour le programme qui le lit. Vérifiez pour vous assurer que le lecteur se soucie réellement.

+0

Merci pour les entrées. Comme, je l'ai mentionné ci-dessous, le fichier src est un peu delta, donc, en référant plusieurs fichiers src, je mets à jour mon fichier tgt. Bien que la commande ne soit pas un problème, les données à l'intérieur d'un ensemble peuvent être répétées. Donc, tout en greping dans le fichier tgt, je suis tenu de garder à l'esprit la ligne d'en-tête aussi bien ... !! – user1999315