Shell awk管道匹配内容
我使用awk、grep使用pipe获取了我们称为A的内容(我文件中的部分内容): 我想使用内容grep或获得匹配的内容以及B中的其他内容(我文件中的部分内容): 当我使用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 示例文件
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的问题保持一致。