如何在 awk 过滤中使用一般条件列表?

How to use a general list of conditions in awk filtering?

我使用 awk 过滤 csv 文件 MYFILE 中的 geohash 数据,其中第一列是 geohash。

cat $MYFILE | awk -F ',' '{if(  = "^f20" ||  = "^f28") print [=10=] }' > extractedFile

过滤流畅快速

但现在条件 f20 和 f28 可以是任何内容,作为文本文件中的输入给出。

我写了这个bash循环,但是速度很慢

ZONE=myZones.txt
IFS=$'\n' read -d '' -r -a ZONES < $ZONE
NZONES=${#ZONES[@]}

  cat $MYFILE | while read line
    do
        geohash=`echo $line | cut -d ',' -f 16`
        
        for zonehash in ${ZONES[@]}
        do
            if [[ $geohash == $zonehash* ]]
            then
                echo $line >> $MYOUTPUTFILE
            else
                continue
            fi
        done
    done

我如何调整 awk 命令,以便根据输入的哈希列表构建标有 XXXX 的部分?

cat $MYFILE | awk -F ',' '{if( XXXX ) print [=12=] }' > extractedFile

评论后编辑:

给定以下输入文件

MYFILE.csv 1,一些数据,f244qeb4qhz1 2,一些数据,f2hg1rqq6hh6 3,someData,f244qeb1z2nv

ZONES.txt f24

awk 'NR==FNR{ZONES[[=34=]]=[=34=]; next} in ZONES {print [=34=]}' ZONES.txt MYFILE.csv

bash 逻辑的简化版本 awk -

awk 'NR==FNR{ZONES[[=10=]]=[=10=]; next}  in ZONES' zones file

zones 是要加载的查找 table。
NR==FNR 检查记录数(总体)是否与 this 文件中的记录数相同 - 换句话说,如果这是第一个文件.
如果是这样,将其加载到查找 table ZONES 中并继续。

如果 NR 与 FNR 不同,则它不再是第一个文件,因此加载查找 table 并且我们正在处理数据。
in ZONES 询问字段 1 是否在查找 table 中,如果是,则执行卷曲中的任何操作。


#编辑

查看您在上面添加的数据,我制作了一个稍大的文件,其中包含与 f20、f24 和 f28 匹配的行。

zones:

$: cat zones
a
f20
b
f24
c
f28

MYFILE.csv:

$: cat MYFILE.csv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f194qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f204qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f194qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f244qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f194qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f284qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f194qeb1z2nv


$: awk -F, 'NR==FNR{ZONES[[=12=]]=[=12=]; next} substr(,0,3) in ZONES' zones MYFILE.csv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f204qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f244qeb1z2nv
1,someData,f194qeb4qhz1 2,someData,f2hg1rqq6hh6 3,someData,f284qeb1z2nv

希望对您有所帮助。