awk - 如果满足条件,则在前后打印特定行

时间:2017-06-03 15:38:58

标签: bash awk blast

拥有以下blastout.txt

blastout.txt

我需要搜索包含Identities = [>=50]

的所有行
  1. 打印包含Query=
  2. 的上一行
  3. 打印下面的第5行
  4. 示例输出(此处仅显示第一行):

    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 =/ && ($3+0)>=50 {c=5}' blastout.txt
    

    这对我来说是可行的,因为文件的结构总是一样的。但是对于1.,行数正在发生变化,并且对于Query=的一个条目,也会发生多条与该模式匹配的行。

    非常感谢您对此实施的帮助!

2 个答案:

答案 0 :(得分:2)

/Query/{q=$0} c...; /Identities/...{print q; c=5}

如果这不是你所需要的,那么编辑你的问题以包含简洁,可测试的样本输入和预期输出。不要问/希望我们去寻找其他网站的例子,因为这意味着你太懒了,不能提出你的问题的简明例子,并希望我们为你努力理解一些大的工作数据集。

拼写出来:

awk '/Query/{q=$0} c&&!--c; /Identities =/ && ($3+0)>=50 {print q; c=5}' blastout.txt

答案 1 :(得分:1)

好吧,我无法告诉你如何使用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

(更正为打印第五行。)