Shell awk管道匹配内容

Shell awk管道匹配内容,shell,awk,grep,Shell,Awk,Grep,我使用awk、grep使用pipe获取了我们称为A的内容(我文件中的部分内容): 我想使用内容grep或获得匹配的内容以及B中的其他内容(我文件中的部分内容): 当我使用 cat a|awk -F"," '{for (i=1;i<=NF;i++)print $i}'|grep -f - B|grep PF|awk '{print $4"\t"$(NF-2)}' 但是,我想打印 LOC_Os04g53190 PF01593 LOC_Os04g53195 PF01593 示例文件

我使用awk、grep使用pipe获取了我们称为A的内容(我文件中的部分内容):

我想使用内容grep或获得匹配的内容以及B中的其他内容(我文件中的部分内容):

当我使用

cat a|awk -F"," '{for (i=1;i<=NF;i++)print $i}'|grep -f - B|grep PF|awk '{print $4"\t"$(NF-2)}'
但是,我想打印

  LOC_Os04g53190 PF01593
  LOC_Os04g53195 PF01593

示例文件

sharad$ cat sample_file
foo
bar
sharad$ 
sharad$ match=$(cat sample_file | grep foo)
sharad$ non_match=$(cat sample_file | grep -v foo)
sharad$ 
将匹配内容捕获到变量中

sharad$ cat sample_file
foo
bar
sharad$ 
sharad$ match=$(cat sample_file | grep foo)
sharad$ non_match=$(cat sample_file | grep -v foo)
sharad$ 
将不匹配的内容捕获到另一个变量中

sharad$ cat sample_file
foo
bar
sharad$ 
sharad$ match=$(cat sample_file | grep foo)
sharad$ non_match=$(cat sample_file | grep -v foo)
sharad$ 
验证匹配变量和非匹配变量(grep-v)的内容

来自man grep

-v、 --反向匹配
所选行与任何指定模式都不匹配。

改进
awk
last语句

cat a | 
awk -F"," '{for (i=1;i<=NF;i++)print $i}' | 
grep -f - B | 
grep PF | 
awk '{n=split($4,v,","); for(i=1; i<=n; ++i) print v[i]"\t"$(NF-2)}'
奖金:仅限awk的解决方案

awk '
    NR==FNR{d[$1]; next}
    $(NF-2) ~ /^PF/{
        n=split($4,v,",")
        for(i=1; i<=n; ++i) if(v[i] in d) print v[i]"\t"$(NF-2)
    }
' RS="[\n,]" a RS="\n" B
awk'
NR==FNR{d[$1];next}
$(NF-2)~/^PF/{
n=拆分($4,v,“,”)

对于(i=1;我没有将代码作为图像发布,它不可搜索,我们无法将其复制/粘贴到答案中。您的问题不清楚。您到底有什么困难?到目前为止您尝试了什么?这是您的输入和预期输出?抱歉,我已更改。
cat
此处不需要,可以是
grep'foo'示例文件
,请参见同意:)我使用cat只是为了与o/p通过管道传输到grep的问题保持一致。