Ajout de contenu à un fichier s’il n’existe pas de valeurs virgules

Nous avons un fichier nommé parameters.txt qui contient des valeurs séparées par des virgules:

db.hostname,db.username,db.password,db.url,db.status,codesettingsA, codesettimgsB 

En outre, nous avons un fichier principal appelé properties.txt qui contient au format Line

 db.hostname=hostname db.username=username db.password=password 

Je dois passer les valeurs séparées par des virgules dans parameters.txt et vérifier si cela existe dans properties.txt. S’il n’existe pas, il devrait imprimer en bas du fichier properties.txt

Par exemple, dans le fichier properties.txt: db.url, db.status, codesettingsA et codesettimgsB n’est pas là. Cependant, je passe du parameters.txt. Il devrait être ajouté et le résultat devrait être comme ceci dans properties.txt:

 db.url db.status codesettingsA codesettimgsB 

Remarque: Les valeurs sont déjà déclarées pour db.hostname = hostname, db.username = username et db.password = password dans le fichier de propriétés. Je passe db, hostname, db.username, db.password du fichier de parameters. Donc, cela devrait ignorer les valeurs même après la virgule et ne devrait pas imprimer db, hostname, db.username, db.password

Est-il possible de les imprimer à la page inférieure de properties.txt? Pouvez-vous fournir un exemple de code?

Vous pouvez utiliser cet awk:

 awk 'FNR==NR{for (i=1; i<=NF; i++) a[$i]; next} $1 in a{delete a[$1]} 1; END{for (i in a) print i "="}' FS=' *, *' params.txt FS=' *= *' props.txt 

Sortie:

 db.hostname=hostname db.username=username db.password=password codesettimgsB= db.url= codesettingsA= db.status= 

Essaye ça :

 IFS=',' read -ra params < parameters.txt for param in "${params[@]}"; do grep "$param" properties.txt || echo "$param" >> properties.txt done 

Les parameters sont analysés et stockés dans un tableau de params .

Pour chaque paramètre, la boucle vérifie si elle est présente dans properties.txt et, si ce n’est pas le cas, l’ajoute au bas du fichier.

 cat properties.txt <(grep -vf properties.txt <(tr ',' '\n'  

tr .. convertit les enregistrements au format csv en newline séparés, grep .. trouve les lignes qui ne sont pas dans parameter.txt et cat .. ajoute