打印具有匹配项的行和与另一模式匹配的上方行 [英] Print line with match and line above that matches another pattern
本文介绍了打印具有匹配项的行和与另一模式匹配的上方行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个带有特定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屋!
查看全文