awk - 如果满足条件,打印前后的特定行
awk - if condition is met, print specific lines before and after
具有以下blastout.txt
:
我需要搜索所有包含 Identities = [>=50]
和
的行
- 打印上面包含
Query=
的一行
- 打印下面第5行
示例输出(此处仅显示第一行):
Query= HWI-ST863:386:C5Y8UACXX:3:1307:8061:42115 1:N:0:ACACGAAT
Sbjct 2030309 ATGACGCTCACCTTGGTGTCGATATCCTCACCTGCGGTGCCAATGCCGCTGCCCGCGGTC 2030250
Query= HWI-ST863:386:C5Y8UACXX:3:2209:19756:21341 1:N:0:ACACGAAT
Sbjct 2418742 CAGGCGTTCCGGCAGTTTGTGCTGGAAGAGGCCCGTGGCCTGGCGGAGCCTCTGCCGGCG 2418683
Query= HWI-ST863:386:C5Y8UACXX:3:1302:8580:7972 1:N:0:ACACGAAT
Sbjct 3178017 CCAGTTATGCTTGGGGCAGGTGAGCTTGTTGCCTTCCAGGGCGAGCTCGGGGATATCCGT 3178076
我解决了2.
:
awk 'c&&!--c;/Identities =/ && (+0)>=50 {c=5}' blastout.txt
这对我来说是可行的,因为文件的结构总是相同的。但是对于1.
,行数是变化的,而且对于Query=
的一个条目,也可能有不止一行匹配模式。
非常感谢您在实施过程中提供的帮助!
/Query/{q=[=10=]} c...; /Identities/...{print q; c=5}
如果这不是您所需要的全部,那么编辑您的问题以包含简明、可测试的样本输入和预期输出。不要 ask/expect 我们去其他网站寻找示例,因为这意味着您懒得想出一个简明的问题示例,并希望我们为您做努力理解的工作一些大数据集。
拼写:
awk '/Query/{q=[=11=]} c&&!--c; /Identities =/ && (+0)>=50 {print q; c=5}' blastout.txt
好吧,我不能告诉你如何用 awk
来做,但我可以用 sed
来做。
blastout.sed
脚本是:
# place 'Query=' line in hold space
/^Query=/h
# If we find an Identity line
/^ Identities = \([5-9][0-9]\|[1-9][0-9][0-9]\)/{
# Exchange pattern with hold space (the Query= line) and print
x
p
# Exchange pattern with hold space (the Identities = line) and print
x
p
# Get the fifth line and print
n
n
n
n
n
p
}
运行 它与命令 sed -n -f blastout.sed blastout.txt
.
以下是一些结果:
$ sed -n -f blastout.sed blastout.txt | head -12
Query= HWI-ST863:386:C5Y8UACXX:3:1307:8061:42115 1:N:0:ACACGAAT
Identities = 100/100 (100%), Gaps = 0/100 (0%)
Sbjct 2030309 ATGACGCTCACCTTGGTGTCGATATCCTCACCTGCGGTGCCAATGCCGCTGCCCGCGGTC 2030250
Query= HWI-ST863:386:C5Y8UACXX:3:2209:19756:21341 1:N:0:ACACGAAT
Identities = 99/100 (99%), Gaps = 0/100 (0%)
Sbjct 2418742 CAGGCGTTCCGGCAGTTTGTGCTGGAAGAGGCCCGTGGCCTGGCGGAGCCTCTGCCGGCG 2418683
Query= HWI-ST863:386:C5Y8UACXX:3:1302:8580:7972 1:N:0:ACACGAAT
Identities = 100/100 (100%), Gaps = 0/100 (0%)
Sbjct 3178017 CCAGTTATGCTTGGGGCAGGTGAGCTTGTTGCCTTCCAGGGCGAGCTCGGGGATATCCGT 3178076
Query= HWI-ST863:386:C5Y8UACXX:3:1106:4759:9532 1:N:0:ACACGAAT
Identities = 100/100 (100%), Gaps = 0/100 (0%)
Sbjct 32627 CGAGGCCGCGGTTTTGGACCTGGACGAGGGGAGTCGGCGTGTGAGTCTTGCGACCCTGGA 32686
(更正为打印第 第五 行。)
具有以下blastout.txt
:
我需要搜索所有包含 Identities = [>=50]
和
- 打印上面包含
Query=
的一行
- 打印下面第5行
示例输出(此处仅显示第一行):
Query= HWI-ST863:386:C5Y8UACXX:3:1307:8061:42115 1:N:0:ACACGAAT
Sbjct 2030309 ATGACGCTCACCTTGGTGTCGATATCCTCACCTGCGGTGCCAATGCCGCTGCCCGCGGTC 2030250
Query= HWI-ST863:386:C5Y8UACXX:3:2209:19756:21341 1:N:0:ACACGAAT
Sbjct 2418742 CAGGCGTTCCGGCAGTTTGTGCTGGAAGAGGCCCGTGGCCTGGCGGAGCCTCTGCCGGCG 2418683
Query= HWI-ST863:386:C5Y8UACXX:3:1302:8580:7972 1:N:0:ACACGAAT
Sbjct 3178017 CCAGTTATGCTTGGGGCAGGTGAGCTTGTTGCCTTCCAGGGCGAGCTCGGGGATATCCGT 3178076
我解决了2.
:
awk 'c&&!--c;/Identities =/ && (+0)>=50 {c=5}' blastout.txt
这对我来说是可行的,因为文件的结构总是相同的。但是对于1.
,行数是变化的,而且对于Query=
的一个条目,也可能有不止一行匹配模式。
非常感谢您在实施过程中提供的帮助!
/Query/{q=[=10=]} c...; /Identities/...{print q; c=5}
如果这不是您所需要的全部,那么编辑您的问题以包含简明、可测试的样本输入和预期输出。不要 ask/expect 我们去其他网站寻找示例,因为这意味着您懒得想出一个简明的问题示例,并希望我们为您做努力理解的工作一些大数据集。
拼写:
awk '/Query/{q=[=11=]} c&&!--c; /Identities =/ && (+0)>=50 {print q; c=5}' blastout.txt
好吧,我不能告诉你如何用 awk
来做,但我可以用 sed
来做。
blastout.sed
脚本是:
# place 'Query=' line in hold space
/^Query=/h
# If we find an Identity line
/^ Identities = \([5-9][0-9]\|[1-9][0-9][0-9]\)/{
# Exchange pattern with hold space (the Query= line) and print
x
p
# Exchange pattern with hold space (the Identities = line) and print
x
p
# Get the fifth line and print
n
n
n
n
n
p
}
运行 它与命令 sed -n -f blastout.sed blastout.txt
.
以下是一些结果:
$ sed -n -f blastout.sed blastout.txt | head -12
Query= HWI-ST863:386:C5Y8UACXX:3:1307:8061:42115 1:N:0:ACACGAAT
Identities = 100/100 (100%), Gaps = 0/100 (0%)
Sbjct 2030309 ATGACGCTCACCTTGGTGTCGATATCCTCACCTGCGGTGCCAATGCCGCTGCCCGCGGTC 2030250
Query= HWI-ST863:386:C5Y8UACXX:3:2209:19756:21341 1:N:0:ACACGAAT
Identities = 99/100 (99%), Gaps = 0/100 (0%)
Sbjct 2418742 CAGGCGTTCCGGCAGTTTGTGCTGGAAGAGGCCCGTGGCCTGGCGGAGCCTCTGCCGGCG 2418683
Query= HWI-ST863:386:C5Y8UACXX:3:1302:8580:7972 1:N:0:ACACGAAT
Identities = 100/100 (100%), Gaps = 0/100 (0%)
Sbjct 3178017 CCAGTTATGCTTGGGGCAGGTGAGCTTGTTGCCTTCCAGGGCGAGCTCGGGGATATCCGT 3178076
Query= HWI-ST863:386:C5Y8UACXX:3:1106:4759:9532 1:N:0:ACACGAAT
Identities = 100/100 (100%), Gaps = 0/100 (0%)
Sbjct 32627 CGAGGCCGCGGTTTTGGACCTGGACGAGGGGAGTCGGCGTGTGAGTCTTGCGACCCTGGA 32686
(更正为打印第 第五 行。)