Il n'y a pas vraiment besoin d'un tableau. Vous pourriez définir votre fonction comme ceci :
delete() {
awk -v customer="^($1)\$" -F ";" '$1 !~ customer {print $ALL}' input.csv >output.csv
}
Je n'ai pas compris comment vous avez défini le séparateur de champs, alors je l'ai modifié pour pouvoir le tester. La partie pertinente consiste à utiliser une expression régulière négativée !~
. J'ai également utilisé le -v
pour awk qui peut vous épargner bien des maux de tête liés aux citations Shell.
Avec cela, vous pouvez utiliser un paramètre comme celui-ci pour supprimer plusieurs clients :
delete 'bla|foo'
Pour dans input.csv comme ceci :
bla;blu;bli
foo;faa;fii
blafoo;blufaa;blifii
cela donnerait
blafoo;blufaa;blifii
dans le fichier output.csv.
Si vous voulez vraiment utiliser un tableau, vous pouvez en outre définir une petite fonction d'aide qui prépare le tableau à être utilisé avec la fonction delete()
fonction ci-dessus :
join() { local IFS=\|; echo "$*"; }
Avec cela, vous êtes en mesure de définir un tableau bash et de le convertir en syntaxe alternative regex :
$ a=(bla blu)
$ join ${a[@]}
bla|blu
Vous pourriez alors appeler delete()
comme ça :
$ a=(customer1 customer2)
$ delete "$(join ${a[@]})"
(Petit aparté pour les utilisateurs de zsh : la fonction join()
n'est pas nécessaire pour zsh, vous pouvez simplement utiliser l'expansion de paramètres suivante : ${(j:|:)a}
pour joindre tous les éléments du tableau avec le |
caractère)