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 etcat ..
ajoute