首页 > 解决方案 > 打印匹配的行和上面匹配另一个模式的行

问题描述

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

ID.txt
aaa
bbb
ccc

我有另一个像 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

我需要循环执行此操作吗?我尝试过这样的事情,但运气不佳:

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

(更新了原始帖子以反映预期的实际输出)。非常感谢您的帮助。于 2020 年 2 月 1 日更新,包括 ID 和文件以及预期输出文件的其他详细信息)

标签: shellawkgrep

解决方案


请您尝试以下操作。

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

推荐阅读