Linux 用Awk搜索四个变量时替换grep?

Linux 用Awk搜索四个变量时替换grep?,linux,awk,grep,Linux,Awk,Grep,我有一个包含每日文件的目录,每行包含500多个字段和600000行 我想查看1个文件,找到字段#351上包含B2的所有行 然后在所有文件中搜索与第一个文件输出中字段282、341、314和348中的值匹配的任何行 现在我有以下内容,但它会生成空白输出: ARCHIVEDIR=/appl/dir/archive file1_tmp=$$.tmp zcat ${ARCHIVEDIR}/FILE_12162019.gz | awk 'BEGIN{FS=OFS="|"} $351 == "B2"{gsu

我有一个包含每日文件的目录,每行包含500多个字段和600000行

我想查看1个文件,找到字段#351上包含B2的所有行

然后在所有文件中搜索与第一个文件输出中字段282、341、314和348中的值匹配的任何行

现在我有以下内容,但它会生成空白输出:

ARCHIVEDIR=/appl/dir/archive
file1_tmp=$$.tmp
zcat ${ARCHIVEDIR}/FILE_12162019.gz | awk 'BEGIN{FS=OFS="|"} $351 == "B2"{gsub(/ /,""); print $282,$341,$314,$348}' > "$file1_tmp"
for fname in ${ARCHIVEDIR}/FILE_*; do
    zcat "$fname" | awk -v fname="$fname" '
        BEGIN { FS=OFS=SUBSEP="|" }
        NR==FNR { tgts[$0]; next }
        ($282,$341,$314,$348) in tgts { print fname, $0 }
    ' "$file1_tmp" -
done
例如,file1在字段351中有130000条包含B2的记录。我想从匹配字段282、341、314和348的所有文件(包括file1中的原始文件)中查找任何记录

下面的原始帖子-转载以试图澄清一些困惑

我放弃了尝试,最终在for循环中得到了以下结果:

echo -e "$FILENAME|\c"
zcat $FILENAME | grep "$SYSTEM" | grep "$RECORDNUM" | grep "$LOCATION" | grep "$PENGUINS"
输出为:

FILENAME |{每行匹配所有4个搜索变量}

我正在寻找一个awk命令,它可以高效地清理输出

我试过:

zcat $FILENAME | awk -v FILENAME=$FILENAME -v SYSTEM=$SYSTEM -v RECORDNUM=$RECORDNUM -v LOCATION=$LOCATION -v PENGUINS=$PENGUINS -v FS="|" -v OFS='|' '/SYSTEM/ && /RECORDNUM/ && /LOCATION/ && /PENGUINS/ {print FILENAME,$0}'`
由于位置值始终相同,我甚至尝试了以下方法:

zcat $FILENAME | awk -v FILENAME=$FILENAME -v SYSTEM=$SYSTEM -v RECORDNUM=$RECORDNUM -v LOCATION=$LOCATION -v PENGUINS=$PENGUINS -v FS="|" -v OFS='|' '($282 == SYSTEM) && ($341 == RECORDNUM)  && ($314 == LOCATION) && ($348 == PENGUINS) {print FILENAME,$0}'
示例输入文件:(出于测试目的,我创建了以下文件的4个副本,并gzip了这些文件) sh-4.2$zcat文件1 系统1 |间隔棒| 1435 |间隔棒|间隔棒|费城|间隔棒|间隔棒|填充 系统2 |隔套| 88083 |隔套|隔套|佛罗里达|隔套|隔套|安装 系统1 |垫片| 80128312 |垫片|垫片| SOCAL |垫片|垫片|垫片|填充 系统2 |隔套| 123141 |隔套|隔套| NOCAL |隔套|隔套|隔套|安装 系统1 |垫片| 12 |垫片|垫片|格鲁吉亚|垫片|垫片|填充 系统2 |隔套| 90391 |隔套|隔套|德克萨斯|隔套|隔套|隔套|安装 系统1 |垫片124910 |垫片|垫片|弗吉尼亚|垫片|垫片|垫片|填充 系统2 |隔套| 354295 |隔套|隔套|佛罗里达|隔套|隔套|安装

sh-4.2$ ls -ls
total 32
4 -rw-rw-rw- 1 host pdx  170 Dec 20 06:10 file1.gz
4 -rw-rw-rw- 1 host pdx  170 Dec 20 06:10 file2.gz
4 -rw-rw-rw- 1 host pdx  170 Dec 20 06:10 file3.gz
4 -rw-rw-rw- 1 host pdx  170 Dec 20 06:10 file4.gz
4 -rwxrwxrwx 1 host pdx  727 Dec 20 06:15 testawk
4 -rwxrwxrwx 1 host pdx  626 Dec 20 06:16 testgrep
然后创建了两个脚本:testawk

 for FILENAME in `ls file1.gz`
do
   zcat $FILENAME | awk -v FS='|' -v OFS='|' '{if ($10 == "STUFFED") print $1,$3,$6,$10}' | tr -d " " >> $$.tmp
done

for TMPR in `cat $$.tmp`
do
   SYSTEM=`echo $TMPR | awk -v FS='|' '{print $1}'`; export SYSTEM
   RECORDNUM=`echo $TMPR | awk -v FS='|' '{print $2}'`; export RECORDNUM
   LOCATION=`echo $TMPR | awk -v FS='|' '{print $3}'`; export LOCATION
   PENGUINS=`echo $TMPR | awk -v FS='|' '{print $4}'`; export PENGUINS
   for FILENAME in `ls fil*`
   do
      export FILENAME
      zcat $FILENAME | awk -v FILENAME=$FILENAME -v SYSTEM=$SYSTEM -v RECORDNUM=$RECORDNUM -v LOCATION=$LOCATION -v PENGUINS=$PENGUINS -v FS="|" '/SYSTEM/ && /RECORDNUM/ && /LOCATION/ && /PENGUINS/'
   done
done

testgrep

for FILENAME in `ls file1.gz`
do
   zcat $FILENAME | awk -v FS='|' -v OFS='|' '{if ($10 == "STUFFED") print $1,$3,$6,$10}' | tr -d " " >> $$.tmp
done

for TMPR in `cat $$.tmp`
do
   SYSTEM=`echo $TMPR | awk -v FS='|' '{print $1}'`; export SYSTEM
   RECORDNUM=`echo $TMPR | awk -v FS='|' '{print $2}'`; export RECORDNUM
   LOCATION=`echo $TMPR | awk -v FS='|' '{print $3}'`; export LOCATION
   PENGUINS=`echo $TMPR | awk -v FS='|' '{print $4}'`; export PENGUINS
   for FILENAME in `ls fil*`
   do
      echo -e "$FILENAME|\c"; zcat $FILENAME | grep "$SYSTEM" | grep "$RECORDNUM" | grep "$LOCATION" | grep "$PENGUINS"
   done
done
当我执行testawk时,输出为空

当我执行testgrep时,输出包含所有行,其中$PENGUIN=在每行的开头填充了文件名

sh-4.2$ ./testgrep
file1.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|1435|SPACER|SPACER|PHILLY|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|80128312|SPACER|SPACER|SOCAL|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|12|SPACER|SPACER|GEORGIA|SPACER|SPACER|SPACER|STUFFED
file1.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file2.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file3.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file4.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
file.gz|SYSTEM1|SPACER|124910|SPACER|SPACER|VIRGINIA|SPACER|SPACER|SPACER|STUFFED
我正在做和试图做的事情的分类: 脚本的以下部分是相同的,它将为file1.gz中字段10中“填充”的任何行创建一个名为$$.tmp的文件。此文件将仅包含字段1、3、6和10中的值。(这将在脚本的下一部分中使用,目前可以正常工作)

脚本的下一部分为4个字段中的每个字段分配变量,并导出要在awk中使用的变量(不确定是否需要导出)

脚本的这一部分将启动我的for循环,以检查所有以fil开头的文件是否匹配:(我已通过注释将awk和grep命令都包括在内)

然后我结束原始的for循环:
完成

您无法以这种方式匹配模式中的变量。试试这个:

awk -v file=$FILENAME -v system=$SYSTEM -v ... '$0 ~ system && ... {print file,$0}'

您无法以这种方式匹配模式中的变量。试试这个:

awk -v file=$FILENAME -v system=$SYSTEM -v ... '$0 ~ system && ... {print file,$0}'

这就是我认为您正在尝试的方法,即打印多个gzip文件中的行,这些文件的名称以
fil*
开头,字段$282、$341、$314、$348中的值与
file1.gz
中的$1、$3、$6、$10中的值相匹配:

file1_tmp=$(mktemp)
zcat file1.gz | awk 'BEGIN{FS=OFS="|"} $10 == "STUFFED"{gsub(/ /,""); print $1,$3,$6,$10}' > "$file1_tmp"
for fname in fil*; do
    zcat "$fname" | awk -v fname="$fname" '
        BEGIN { FS=OFS=SUBSEP="|" }
        NR==FNR { tgts[$0]; next }
        ($282,$341,$314,$348) in tgts { print fname, $0 }
    ' "$file1_tmp" -
done
但是我不知道为什么您的脚本在1个文件上有一个循环(`ls file1.gz`中的文件名为
),我也不知道您是否真的想在第二个循环中再次处理该文件,
file1.gz
将匹配全局模式
fil*


如果上述内容不能完全满足您的要求,请更新您的问题,以澄清您想做什么(而不是如何做)。

这是我认为您想做的事情,例如,打印多个gzip文件中的行,这些文件的名称以
fil*
开头,字段$282、$341、$314、$348中的值与
file1.gz
中字段$1、$3、$6、$10中的值相匹配:

file1_tmp=$(mktemp)
zcat file1.gz | awk 'BEGIN{FS=OFS="|"} $10 == "STUFFED"{gsub(/ /,""); print $1,$3,$6,$10}' > "$file1_tmp"
for fname in fil*; do
    zcat "$fname" | awk -v fname="$fname" '
        BEGIN { FS=OFS=SUBSEP="|" }
        NR==FNR { tgts[$0]; next }
        ($282,$341,$314,$348) in tgts { print fname, $0 }
    ' "$file1_tmp" -
done
但是我不知道为什么您的脚本在1个文件上有一个循环(`ls file1.gz`
中的文件名为
),我也不知道您是否真的想在第二个循环中再次处理该文件,
file1.gz
将匹配全局模式
fil*


如果上述内容不能完全满足您的要求,则更新您的问题,以澄清您想做的事情(与您想做的事情相反)。

什么不起作用?没有找到与所有4项匹配的行。这4个grep有效。如果需要的话,我会尝试整理一个示例文件。@Unix\u pharmacy,总是建议发布输入和预期输出的示例,因此请在您的问题中添加相同的内容,然后让我们知道。我已使用示例脚本/输入在帖子中添加了信息。希望这能有所帮助。顺便说一下,您的shell脚本有很多问题-首先,您应该运行它并更正它警告您的所有内容。另请参见、、和。什么不起作用?它找不到与所有4行匹配的行。这4个grep有效。如果需要的话,我会尝试整理一个示例文件。@Unix\u pharmacy,总是建议发布输入和预期输出的示例,因此请在您的问题中添加相同的内容,然后让我们知道。我已使用示例脚本/输入在帖子中添加了信息。希望这能有所帮助。顺便说一下,您的shell脚本有很多问题-首先,您应该运行它并更正它警告您的所有内容。另请参见、、和。用户应该做什么?我没有看到任何搜索模式。另外,该输出为空。@Unix\u药房:我只是想展示一下这项技术。还是我遗漏了什么?请参阅更新。用户应该做什么?我没有看到任何搜索模式。另外,该输出为空。@Unix\u药房:我只是想展示一下这项技术。还是我遗漏了什么?见更新。谢谢@Ed Morton。我决定删除我的问题,用另一种方式重新提问。我相信你的剧本会的
file1_tmp=$(mktemp)
zcat file1.gz | awk 'BEGIN{FS=OFS="|"} $10 == "STUFFED"{gsub(/ /,""); print $1,$3,$6,$10}' > "$file1_tmp"
for fname in fil*; do
    zcat "$fname" | awk -v fname="$fname" '
        BEGIN { FS=OFS=SUBSEP="|" }
        NR==FNR { tgts[$0]; next }
        ($282,$341,$314,$348) in tgts { print fname, $0 }
    ' "$file1_tmp" -
done