抱歉,如果这只是这里的简单正则表达式,我正在尝试为一行中的前X个字符设置grep。我最初的想法是
#!/usr/bin/env bash
X=$1
cat filename | ... stream ... | grep -r '\w{0,$X}'
虽然我实际上并不认为这行得通...
基本上,假设我有以下内容:
ATGGCGAGAGAGGTGCCTATAGAGAAATTGAGAAACATAGGTATAGTTGCTCACATTGACGCGGGTAAAACTACGACTAC
CGAGAG**A**ATTCTCTATTACACGGGTAAGACTTACAAGATAGGTGAAGTTCACGAAGGTGCTGCAACGATGGACTGGATGC
CCCAGGAAAAGGAAAGAGGTATAACCATAACCGTTGCAACGACCGCATGTTATTGGACGAGAAACGGGGAGAGGTATCAA
如果我想grep到第二行的第七名,我该怎么做?什么正则表达式将只能获得以下内容:
ATGGCGAGAGAGGTGCCTATAGAGAAATTGAGAAACATAGGTATAGTTGCTCACATTGACGCGGGTAAAACTACGACTAC
CGAGAGA
更详细的解释:
我目前所打印的内容打印出了指示位置所在的行及其之前的行,但没有指出该位置在输出中的确切位置(我将我的fasta文件编入此行):
#!/usr/bin/env bash
spot=$1
myvar=`expr $spot / 81`
#later, I awk in the line number as a column, to navigate
X=$(($spot % 81))
#since each line in the file I'm looking at has 81 characters per line (not including the newline character), this gives the spot I'm looking for
grep -v '>' | awk | 'BEGIN{t=-1}{t = t + 1; {print t, $0}}' | grep -B 1 "$myvar" | head
基本上是尝试启动一个简单的命令行FASTA文件导航器(核苷酸序列,蛋白质序列),以及在指定位置查看序列的内容(我这里还没有使用$ X)。
因此,例如,如果我想按以下顺序读取到第9个位置(此处为粗体T)(例如,类似于10051位置,它在第7行的第124行上
\>NC_000918.1 Aquifex aeolicus VF5, complete sequence
...
ATGGCGAGAGAGGTGCCTATAGAGAAATTGAGAAACATAGGTATAGTTGCTCACATTGACGCGGGTAAAACTACGACTAC
CGAGAG**A**ATTCTCTATTACACGGGTAAGACTTACAAGATAGGTGAAGTTCACGAAGGTGCTGCAACGATGGACTGGATGC
CCCAGGAAAAGGAAAGAGGTATAACCATAACCGTTGCAACGACCGCATGTTATTGGACGAGAAACGGGGAGAGGTATCAA
我想我理解为包括两个前行,和``现在的”排队直到第9位,等等(基于脚本我现在有),我想是这样
ATGGCGAGAGAGGTGCCTATAGAGAAATTGAGAAACATAGGTATAGTTGCTCACATTGACGCGGGTAAAACTACGACTAC
CGAGAGA
当前,脚本给出了(这123个ATGGCG ...列,以防万一将其包装并使其不清楚)
123 ATGGCGAGAGAGGTGCCTATAGAGAAATTGAGAAACATAGGTATAGTTGCTCACATTGACGCGGGTAAAACTACGACTAC
124 CGAGAGAATTCTCTATTACACGGGTAAGACTTACAAGATAGGTGAAGTTCACGAAGGTGCTGCAACGATGGACTGGATGC
和其他包含123、124的行。我不介意行号(尽管我很容易摆脱它们),但我只是想在这里获得更具体的观点。
我对bash脚本还很陌生,所以让我知道我是否还写了一些怪异的东西!
(注意:我显示的行实际上是VF5 fasta文件的前三行,我只是假装使它们成为124、123等行来说明这一点)
假设:
那请您尝试一下awk
解决方案:
#!/bin/bash
spot=$1 # assigned to "10051" or whatever
awk -v spot="$spot" '!/^>/ {
amount += length
if (amount >= spot) {
print(prev substr($0, 1, spot - (amount - length)))
exit
}
prev = $0 RS
}' file.fasta
-v spot="$spot"
选项将awk变量分配spot
给bash变量$spot
。!/^>/
跳过标题行。amount
累积字符长度。prev
保留前一行(附加到RS,记录分隔符)。请注意,FASTA格式的行长未固定为特定值,例如80。该文档仅描述为:
建议所有文本行的长度都应少于80个字符。
那么最好简单地计算行的长度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句