打印具有匹配项的行和与另一模式匹配的上方行 [英] Print line with match and line above that matches another pattern

查看:108
本文介绍了打印具有匹配项的行和与另一模式匹配的上方行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有特定ID的文件.

I have a file with certain IDs.

ID.txt
aaa
bbb
ccc

我还有另一个这样的文件 File.txt

I have a another file like this File.txt

Query: ABC1
aaa
abc
bbb
ccc
Query: CAB1
bbb
ccc
abc
Query: CBB1
ass
aaa
bbc

**Expected output:**
Query: ABC1
aaa
bbb
ccc
Query: CAB1
bbb
ccc
Query: CBB1
aaa

真实示例:

**IDs**
    LYSC_CHICK
    LACB_BOVIN
    B5B0D4_BOVIN
    DEF1_ARAHY
    DEF2_ARAHY
    DEF3_ARAHY
    TRFL_BOVIN
    Q0PKR4_ARAHY
    Q0GM57_ARAHY
    Q647G5_ARAHY
    Q6JYQ7_HEVBR
    AMP2_FAGES

**File**
    Query: PROKKA_00022 hypothetical protein - 36 aa
    Hit: AMP1_FAGES UniProt Fag e 4 UniProt P0DKH7 http://www.u
     100.0% identity
    Hit: AMP2_FAGES UniProt Fag e 4 UniProt P0DKH8 http://www.u
     100.0% identity
    Hit: O49860_HEVBR UniProt Hev b 6 UniProt O49860 http://www
     100.0% identity
    Hit: Q6JYQ7_HEVBR UniProt Hev b 6 UniProt Q6JYQ7 http://www
     100.0% identity
    Hit: HEVE_HEVBR UniProt Hev b 6 UniProt P02877 http://www.u
    Query: PROKKA_00572 hypothetical protein - 36 aa
    Hit: AMP1_FAGES UniProt Fag e 4 UniProt P0DKH7 http://www.u
     100.0% identity
    Hit: AMP2_FAGES UniProt Fag e 4 UniProt P0DKH8 http://www.u
     100.0% identity
    Hit: O49860_HEVBR UniProt Hev b 6 UniProt O49860 http://www
     100.0% identity
    Hit: Q6JYQ7_HEVBR UniProt Hev b 6 UniProt Q6JYQ7 http://www
     100.0% identity
    Query: PROKKA_01572 hypothetical protein - 36 aa
    Hit: AMP1_FHYES UniProt Fag e 4 UniProt P0DKH7 http://www.u
     100.0% identity
    Hit: AMX5_FAGES UniProt Fag e 4 UniProt P0DKH8 http://www.u
     100.0% identity
    Hit: O87860_HLLBR UniProt Hev b 6 UniProt O49860 http://www
     100.0% identity
    Hit: JHYYQ7_HEVBR UniProt Hev b 6 UniProt Q6JYQ7 http://www
     100.0% identity

**Expected output:**

    Query: PROKKA_00022 hypothetical protein - 36 aa
    Hit: Q6JYQ7_HEVBR UniProt Hev b 6 UniProt Q6JYQ7 http://www
    Hit: AMP2_FAGES UniProt Fag e 4 UniProt P0DKH8 http://www.u
    Query: PROKKA_00572 hypothetical protein - 36 aa
    Hit: Q6JYQ7_HEVBR UniProt Hev b 6 UniProt Q6JYQ7 http://www
    Hit: AMP2_FAGES UniProt Fag e 4 UniProt P0DKH8 http://www.u

我需要循环执行此操作吗?我已经尝试过类似的方法,但是运气不好:

Do i need to do this in a loop? I've tried something like this, but not having much luck:

for i in `cat ID.txt`
do 
   awk '/Query/{bar=$2} /"$i"/{print bar}' File.txt > output.txt
done

(已更新原始帖子以反映预期的实际输出).非常感谢您的帮助.已于02-01-2020更新,以包含ID和文件以及预期的输出文件的其他详细信息)

(Original post updated to reflect expected real output). Thanks a lot for the help. Updated on 02-01-2020 to include additional details for the IDs and Files and Expected output files)

推荐答案

能否请您尝试以下操作.

Could you please try following.

awk '
FNR==NR{
  a[$1]
  next
}
/^Query/ || $0 in a
' id.txt file.txt

输出如下.

Query: ABC1
aaa
bbb
ccc
Query: CAB1
bbb
ccc
Query: CBB1
aaa

这篇关于打印具有匹配项的行和与另一模式匹配的上方行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆