带阵列的Awk列

带阵列的Awk列,awk,Awk,是否可以这样做,但使用一个实际的字符串数组,其中表示数组 array=(cat dog mouse fish ...) awk -F "," '{ if ( $5!="array" ) { print $0; } }' file 我想在数组中的一些字符串中使用空格。 我也希望能够匹配部分匹配,所以我的数组中的雪将匹配雪人 它应该区分大小写 示例csv s,dog,34 3,cat,4 1,african elephant,gd A,African Elephant,33 H,snowman,

是否可以这样做,但使用一个实际的字符串数组,其中表示数组

array=(cat
dog
mouse
fish
...)

awk -F "," '{ if ( $5!="array" ) { print $0; } }' file
我想在数组中的一些字符串中使用空格。 我也希望能够匹配部分匹配,所以我的数组中的雪将匹配雪人 它应该区分大小写

示例csv

s,dog,34
3,cat,4
1,african elephant,gd
A,African Elephant,33
H,snowman,8
8,indian elephant,3k
7,Fish,94
...
示例数组

snow
dog
african elephant
预期产量

s,dog,34
H,snowman,8
1,african elephant,gd
Cyrus发布了这篇文章,效果很好,但它不允许数组字符串中有空格,也不会匹配部分匹配

echo "${array[@]}" | awk 'FNR==NR{len=split($0,a," "); next} {for(i=1;i<=len;i++) {if(a[i]==$2){next}} print}' FS=',' - file

这不会打印csv文件中的任何行,该文件包含第5列中数组中的元素:

echo "${array[@]}" | awk 'FNR==NR{len=split($0,a," "); next} {for(i=1;i<=len;i++) {if(a[i]==$5){next}} print}' FS=',' - file

这不会打印csv文件中的任何行,该文件包含第5列中数组中的元素:

echo "${array[@]}" | awk 'FNR==NR{len=split($0,a," "); next} {for(i=1;i<=len;i++) {if(a[i]==$5){next}} print}' FS=',' - file

对所有数组内容使用单个regexp的简单方法:

$ array=('snow' 'dog' 'african elephant')
$ printf '%s\n' "${array[@]}" | awk -F, 'NR==FNR{r=r s $0; s="|"; next} $2~r' - example.csv
s,dog,34
1,african elephant,gd
H,snowman,8
或者,如果您更喜欢字符串比较:

$ cat tst.sh
#!/bin/env bash

array=('snow' 'dog' 'african elephant')

printf '%s\n' "${array[@]}" |
awk -F',' '
    NR==FNR {
        array[$0]
        next
    }
    {
        for (val in array) {
            if ( index($2,val) ) {      # or $2 ~ val for a regexp match
                print
                next
            }
        }
    }
' - example.csv

$ ./tst.sh
s,dog,34
1,african elephant,gd
H,snowman,8

对所有数组内容使用单个regexp的简单方法:

$ array=('snow' 'dog' 'african elephant')
$ printf '%s\n' "${array[@]}" | awk -F, 'NR==FNR{r=r s $0; s="|"; next} $2~r' - example.csv
s,dog,34
1,african elephant,gd
H,snowman,8
或者,如果您更喜欢字符串比较:

$ cat tst.sh
#!/bin/env bash

array=('snow' 'dog' 'african elephant')

printf '%s\n' "${array[@]}" |
awk -F',' '
    NR==FNR {
        array[$0]
        next
    }
    {
        for (val in array) {
            if ( index($2,val) ) {      # or $2 ~ val for a regexp match
                print
                next
            }
        }
    }
' - example.csv

$ ./tst.sh
s,dog,34
1,african elephant,gd
H,snowman,8

我的数组中可以有带空格的字符串吗?部分匹配呢?所以我阵中的雪会和雪人相配。应该在OP中提到这些。在我的数组中可以有带空格的字符串吗?部分匹配呢?所以我阵中的雪会和雪人相配。应该在作品中提到这些。那太好了,谢谢。我怎么能反过来呢?如果没有匹配,请打印。不客气。我相信你可以通过几分钟的思考来理解:not符号是!但如果你不能提出一个大家都不喜欢的新问题,我想应该这样做,但不知道怎么做。如果指数是3美元,那太好了,谢谢。我怎么能反过来呢?如果没有匹配,请打印。不客气。我相信你可以通过几分钟的思考来理解:not符号是!但如果你不能提出一个大家都不喜欢的新问题,我想应该这样做,但不知道怎么做。如果索引为$3,则val