Немає потреби в масиві. Ви можете визначити свою функцію так:
delete() {
awk -v customer="^($1)\$" -F ";" '$1 !~ customer {print $ALL}' input.csv >output.csv
}
Я не розумів, як ви визначили роздільник поля, тому змінив його, щоб мати можливість протестувати. Відповідна частина полягає у використанні заперечного регулярного виразу !~. Також я використав -vпараметр для awk, який може врятувати вас від безлічі оболонок, котируючи головний біль.
За допомогою цього параметра можна використовувати такий параметр, щоб видалити декілька клієнтів:
delete 'bla|foo'
Для input.csv, як це:
bla;blu;bli
foo;faa;fii
blafoo;blufaa;blifii
це дасть урожай
blafoo;blufaa;blifii
у виході.csv.
Якщо ви дійсно хочете використовувати масив, ви можете додатково визначити невелику помічну функцію, яка готує масив до використання з delete()функцією, наведеною вище:
join() { local IFS=\|; echo "$*"; }
За допомогою цього ви зможете визначити масив bash і перетворити його в альтернативний синтаксис регулярного вирівнювання:
$ a=(bla blu)
$ join ${a[@]}
bla|blu
Тоді ви можете зателефонувати delete()так:
$ a=(customer1 customer2)
$ delete "$(join ${a[@]})"
(Маленька бічна примітка для користувачів zsh: join()функція не потрібна для zsh, ви можете просто використовувати таке розширення параметрів: ${(j:|:)a}щоб з'єднати всі елементи масиву з |символом)
$ALL? Чимprint $ALLвідрізняється відprint? І чому ти передаєш$@поодинокі цитати? Це означає, що вона не буде розширена.