Créez les fichiers suivants:
add_conf.awk
:
BEGIN {FS=","}
NF!=7 {bad=1; exit 1}
{print}
END {if (!bad) print "1/1/1970,,propertyName,\"Description of the Config\",\"false\",,1"}
add_conf.sh
:
#!/bin/sh
tempfile=$(mktemp)
for f
do
if awk -f add_conf.awk "$f" > "$tempfile"
then
cp "$tempfile" "$f"
fi
done
rm "$tempfile"
et fait chmod +x add_conf.sh
. (Bien sûr, vous pouvez mettre ces fichiers
quelque part autre que le répertoire courant;
ajustez simplement les références de nom de fichier en conséquence.
find . -name config.csv -type f -exec ./add_conf.sh {} +
le find
commande trouvera tous les fichiers simples nommés config.csv
et passer leurs noms (chemin) à add_conf.sh
.
Ce script invoque awk
sur chacun des fichiers,
écrire la sortie dans un fichier temporaire.
Si la awk
le processus signale le succès,
le script copie ensuite la sortie sur le fichier d'entrée.
le awk
scénario, add_conf.awk
, définit le séparateur de champs (FS) sur virgule
(ce qui est une chose évidente à faire s’il s’agit d’un fichier séparé par des virgules).
Si elle rencontre une ligne comportant moins de sept champs (séparés par des virgules),
il définit le bad
drapeau et sorties avec le statut 1,
de sorte que le script shell verra que ce fichier n'est pas éligible
et le laisserai seul.
Sinon, chaque ligne d'entrée est imprimée dans le fichier de sortie (temporaire).
Il ajoutera une nouvelle ligne à la dernière ligne, si nécessaire.
Ensuite, si le fichier était OK jusqu'à la fin, ajoutez la nouvelle ligne de données.
Remarques:
- Ce qui précède est écrit pour GNU
awk
.
POSIX awk
ne spécifie pas le comportement des données d'entrée ne se terminant pas par une nouvelle ligne,
et il ne supporte pas le exit
commander.
- J'ai ignoré ta troisième balle,
“ si la propriété n'existe pas puis ajoutez-en un à la fin du fichier. ”
Il peut probablement être ajouté facilement si vous précisez ce que vous voulez dire.
NF
n'aura pas la "bonne" valeur, et donc des tests basés surNF
peut donner des résultats incorrects.awk
n’est pas un outil parfait pour traiter les données CSV.