удалить строки, соответствующие массиву черного списка - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть это, которое печатает строки, где 3-й столбец соответствует значению в моем массиве.

blacklist=('dog'
'cat'
'fish'
'african elephant')

printf '%s\n' "${blacklist[@]}" |
awk -F',' '
    NR==FNR {
        array[$0]
        next
    }
    {
        for (val in array) {
            if ( index($3,val) ) {
                print
                next
            }
        }
    }
' - $file

Файл:

dfd213,323,cat
90,65,dog
ddf,5hgf,hamster
jhg67,5f,fish
6h,ioo,indian elephant
5444h,fdh,african elephant
08,fd,mouse
09,dsd,macaw

Вывод:

cat
dog
fish
african elephant

Как я могу изменить его для печати строк, которые не совпадают вместо этого?

Требуется вывод :

hamster
indian elephant
mouse
macaw

1 Ответ

0 голосов
/ 13 марта 2020
 awk -v bl="${blacklist}" -F, '{flag=0; split(bl,a,","); for (i in a)  if ($3==a[i]) flag=1; } {if(flag==0) print $3}'  file
  :>cat file
   dfd213,323,cat
   90,65,dog
   ddf,5hgf,hamster
   jhg67,5f,fish
   6h,ioo,indian elephant
   5444h,fdh,african elephant
   08,fd,mouse
   09,dsd,macaw
   :>blacklist="dog,cat,fish,african elephant"
   :> awk -v bl="${blacklist}" -F, '{flag=0; split(bl,a,","); for (i in a)  if ($3==a[i]) flag=1; } {if(flag==0) print $3}'  file
   hamster
   indian elephant
   mouse
   macaw
   :>

Обратите внимание, я передал массив как , разделенный

...