我有一个文件,我正在寻找一个模式" N"仅在偶数行上。当一行匹配时,我想保留上下文 - 它上面的奇数行。
我理解如何保持上下文using -A, -B, -C,但模式" N"也可能匹配奇数行,所以我能想到解决问题的唯一方法是在使用grep之前分离偶数行和奇数行,从而删除上下文。
有没有办法做到这一点,而不必提取与grep匹配的行号,然后在事后获取文件中的那些特定行?我怀疑我可以用awk做到这一点,但我不确定。
我正在尝试优化我认为已经有效的代码,因为它将处理的文件非常庞大,需要数小时才能运行。
我试图找到其中包含" N"的任何DNA序列,并将它们放在一个文件中,以及任何不具有&#34的序列; N"在其中,并将它们放在另一个文件中。然而,ID行也可以具有" N" s。我希望ID行保持连接到新文件中它上面一行中的每个序列。
示例输入:
>100000|NODE_2_length_277_cov_4.245487
ATCTTTTAACCCCAAAAACTCAAGTATGTGAGCCAAGTGAACATAACTGCATAAATATCAGGCTCCAAAATAATCTACTGCTTGTTGTGTAGATATAGAGCACACAATTTCTTTTTTAAAGCCCTCCCTTTCACTCTCTCTATCCCACACCCAGAAAAACTCCTATTTAGAGAAAGCCACACCTATCACTAAGAGCAAACCAACCTTTCAAAAAAAAAAAAAAAACACATTAGGAGCAAACTGTTAGGAGCCATTCAAAACCAAAGGAAATGCCAAGACACACACACACACACACACACACAC
>100001|NODE_1_length_426_cov_11.427230
AAATATATAAAAAACCTGTGTTGTGACAACAGGTTGAGAAGTAATGAGAAAATGGACGAATTAGTTCAGGATGTCTCAAAGCAGATTTCTTTCCACTTAATCTCGATGTCCTACGAAAATGCTGACTTAGGTTGTAGTTTATGTTTCTTAGATTCCAATATTTTAAAATGGCCCTTGAAATTATATTAAAAAGCTCATGAACAAGTGCATAATCAATGATAAATGAATATTTATGGTTGAGATTTGGGAATTATTAATCAATATACCTCTATACTCTTGGCTCTCTTGAAGTTTAATTCAAGTGTATTTAATTAGATTCCTACCCCAAATCAACTTTAAGAAGGCTGCTTTTCTTCTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCG
答案 0 :(得分:2)
使用awk:
seq 10 |
awk -v pattern='[26]' '
FNR % 2 == 1 {odd = $0}
FNR % 2 == 0 && $0 ~ pattern {print odd; print}
'
1
2
5
6
使用您的示例输入:
awk '
FNR % 2 == 1 {odd = $0}
FNR % 2 == 0 {
if (/N/)
file = FILENAME ".with_N"
else
file = FILENAME ".no_N"
print odd > file
print > file
}
' myfile
答案 1 :(得分:1)
键击次数较少的另一种解决方案是
awk '!(NR%2) && /N/ {print p; print}{p=$0}'
!(NR%2)
成语用于挑选偶数行;
也保持前一行没有任何条件,因为只打印匹配的行。