shell - 打印匹配的行和上面匹配另一个模式的行
问题描述
我有一个带有特定 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 和文件以及预期输出文件的其他详细信息)
解决方案
请您尝试以下操作。
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
推荐阅读
- python - 使用 Python 修复 HTML 标签括号
- python - 如何在 Python 3 中解析文件中的一行时省略不需要的字符
- sql - 获取名称以特定值开头的记录列表,并在不同行的其他值的情况下忽略
- javascript - 通过单击菜单打开和关闭不同的 div
- python-3.x - 急切执行,tf.GradientTape 只返回 None
- java - 在一个类中使用两种方法(Rational)来化简分数
- java - JUnit 5 测试没有 SpringBootApplication 的子项目
- ruby-on-rails - 根据 Rails 中的列获取唯一记录
- java - android中的OkHttp,看不到网络流量或日志响应
- python - 是否可以在 python 中为类设置默认方法?