2010-09-14 8 views
0

J'ai 2 deux fichiersscript shell d'aide couper et sed

$cat file1.txt 
field1=value1 
field2=value2 
field3=value3 
:: 
:: 

$cat file2.txt 
something.field1.some 
otherthing.field2.anything 
anything.field3.something 

Je dois lire file1.txt et vérifier si file2.txt pour champN et le remplacer par valeurN

afin que le résultat sera

something.value1.some 
    otherthing.value2.anything 
    anything.value3.something 

Répondre

4

condition qu'il n'y ait pas de caractères spéciaux dans vos sed -type champs et les valeurs, vous pouvez utiliser une approche meta-sed:

pax> sed -e 's/^/s\/\\./' -e 's/=/\\.\/./' -e 's/$/.\/g/' file1.txt >x.sed 
pax> sed -f x.sed file2.txt 

something.value1.some 
otherthing.value2.anything 
anything.value3.something 

Si vous regardez le fichier x.sed, vous verrez que la première sed fait juste une liste de sed commandes à exécuter sur votre deuxième fichier.

+0

thanks..i'll essayer. –

2

utilisation awk

$ awk -F"[=.]" 'FNR==NR{a[$1]=$2;next}{$2=a[$2]}1' OFS="." file1 file2 
something.value1.some 
otherthing.value2.anything 
anything.value3.something 
+0

je vous remercie pour votre réponse, je vais utiliser cette méthode après avoir entendu parler de awk. Je sais quelque chose à propos de sed mais zéro à awk :) merci encore. –

0

Cela nécessite malheureusement les fichiers à trier:

tr = . < file1.txt | join -t . -1 1 -2 2 -o 2.1 1.2 2.3 - file2.txt