我有一个包含 7 列的文件,一个具有染色体区域的 GFF 文件。我想将 REGION ="exon" 的行折叠到文件中的只有一行。必须根据与每个区域重叠的区域折叠该行其他。
REGION START END SCORE STRAND FRAME ATTRIBUTE
exon 26453 26644 . + . Transcript "XM_092971"; Name "XM_092971"
exon 26842 27020 . + . Transcript "XM_092971"; Name "XM_092971"
exon 30355 30899 . - . Transcript "XM_104663"; Name "XM_104663"
GS_TRAN 30355 34083 . - . GS_TRAN "Hs22_30444_28_1_1"; Name "Hs22_30444_28_1_1"
snp 30847 30847 . + . SNP "rs2971719"; Name "rs2971719"
exon 31012 31409 . - . Transcript "XM_104663"; Name "XM_104663"
exon 34013 34083 . - …
Run Code Online (Sandbox Code Playgroud) 常规文件包含按列组织的数据,以空格分隔。根据第二个字段的值,我想将该初始数据文件拆分为几个其他文件。
数据文件有 54,242 行和 399 列。数据结构是这样的:
SNP Chr Pos ID_01 ID_02 ...
rs01 1 200 AA BB ...
rs02 25 10 BA AA ...
rs03 1 30 AA BB ...
rs04 X 90 BB AA ...
Run Code Online (Sandbox Code Playgroud)
我的输出应包含与第2 列file"${chr}"
中的不同$chr
值一样多的每条记录(或行)。例如:
file1将包含其第二个字段为的所有记录1
:
SNP Chr Pos ID_01 ID_02 ...
rs01 1 200 AA BB ...
rs03 1 30 AA BB ...
Run Code Online (Sandbox Code Playgroud)
file25将包含其第二个字段为的所有记录25
:
SNP Chr Pos ID_01 ID_02 ...
rs02 25 10 BA AA ... …
Run Code Online (Sandbox Code Playgroud) #CHROM POS REF ALT ../S101_sorted.bam ../S102_sorted.bam ../S105_sorted.bam ../S107_sorted.bam ../S113_sorted.bam ../S114_sorted.bam ../S115_sorted.bam ../S
Aradu.A01 296611 T C T T T T T T T T T T T T T T T/C T T/C T T T T
Aradu.A01 326689 T C T/C T T T T/C T T T T/C T/C T T T T T T T T/C T/C T T
Aradu.A01 615910 T G T T T T T T T T T T T T T T …
Run Code Online (Sandbox Code Playgroud) 我刚刚找到了一个可用于解开 fasta 文件的公式。在给出公式之前,我需要解释一下什么是打开 fasta 文件。总之,fasta格式是这样的:
>name_of_sequence$
xxxxxxxxxxxxxxxxxxxxxx$
>name_of_sequence_2$
xxxxxxxxxxxxxxxxxxxxxx$
>name_of_sequence_3$
xxxxxxxxxxxxxxxxxxxxxx$
Run Code Online (Sandbox Code Playgroud)
这将是一个普通的 fasta 文件,因为我每个序列只有一行(xxxxxx ...)。美元符号是换行符。
但是,有时您可以找到这样的包装好的 fasta 文件:
>name_of_sequence$
xxxxxxxxx$
xxxxxxxxx$
xxxx$
>name_of_sequence_2$
xxxxxxxxx$
xxxxxxxxx$
xxxx$
>name_of_sequence_3$
xxxxxxxxx$
xxxxxxxxx$
xxxx$
Run Code Online (Sandbox Code Playgroud)
在这里,您仍然只有三个序列,但每个序列都分为三个部分。解开 fasta 文件意味着将后一种格式转换为前一种格式(每个序列一行)。
为此,您需要从后一个文件中删除换行符,但不是全部。您需要在序列名称之后保留换行符(例如:>name_of_sequence$)和在序列的末尾(例如:xxxx$)。
看来这个公式是这样做的:
cat infasta | awk '/^>/{print s? s"\n"$0:$0;s="";next}{s=s sprintf("%s",$0)}END{if(s)print s}' > outfasta
Run Code Online (Sandbox Code Playgroud)
我的问题是:有人可以向我解释它是如何工作的吗?
我有包含许多行的文本文件,其中一些以“>”开头(这是一个所谓的 *.fasta 文件,“>”s 标志着一个新信息容器的开始):
>header_name1
sequence_info
>header_name2
sequence_info
Run Code Online (Sandbox Code Playgroud)
我想将这些行所在的文件名添加到标题中。例如,如果文件名为“1_nc.fasta”,则文件中以 > 开头的所有行都应添加标签“001”:
>001-header_name1
sequence_info
>001-header_name2
sequence_info
Run Code Online (Sandbox Code Playgroud)
有人给我提供了这条线:
sed 's/^>/>001-/g' 1_nc.fasta>001_tagged.fasta
Run Code Online (Sandbox Code Playgroud)
因此,2_nc.fasta 中的所有标题都应以“002-”、3_nc.fasta -> “003-”等开头。
我知道如何编写并行作业脚本,但作业完成得如此之快,我认为在循环中串行处理所有文件的脚本要好得多。不幸的是,我不能自己做到这一点。
添加扭曲:11_nc.fasta 和 149_nc.fasta 不可用。
如何遍历我目录中的所有 500 个文件?
我有一个看起来像这样的数据集:
>TRINITY_DN37_c0_g1_i1 len=333 path=[361:0-43 362:44-332] [-1, 361, 362, -2]
GCCGCCATCATGGATGCCAGCCGTGTGCAGCCCATCAAGCTTGCCAGAGTCACCAAGGTT
>TRINITY_DN37_c0_g2_i1 len=356 path=[359:0-66 360:67-355] [-1, 359, 360, -2]
ACGTGACCCCCTTTCTGTCTCAAGCCGCCATCATGGATGCCAGTCGTGTGCAGCCCATCA
>TRINITY_DN15_c1_g1_i1 len=394 path=[372:0-393] [-1, 372, -2]
GCACTTACCATGCATGGAAGGCAAATGCCATCGGAAGGTCTGCAAAGACTGTTAGGGAGT
Run Code Online (Sandbox Code Playgroud)
我需要用一系列数字替换字符串 'len=XXX',它在数千行中位于相同的位置,以便唯一地标记每个序列。理想情况下,我正在考虑类似的事情:
>TRINITY_DN37_c0_g1_i1 1 path=[361:0-43 362:44-332] [-1, 361, 362, -2]
GCCGCCATCATGGATGCCAGCCGTGTGCAGCCCATCAAGCTTGCCAGAGTCACCAAGGTT
>TRINITY_DN37_c0_g2_i1 2 path=[359:0-66 360:67-355] [-1, 359, 360, -2]
ACGTGACCCCCTTTCTGTCTCAAGCCGCCATCATGGATGCCAGTCGTGTGCAGCCCATCA
>TRINITY_DN15_c1_g1_i1 3 path=[372:0-393] [-1, 372, -2]
GCACTTACCATGCATGGAAGGCAAATGCCATCGGAAGGTCTGCAAAGACTGTTAGGGAGT
Run Code Online (Sandbox Code Playgroud)
我正在使用 OSX。
有任何想法吗?
我有一个序列文件,想用它的出现位置和长度来计算连续字符“N” 假设我有一个mySequence.fasta
像这样命名的文件:
>sequence-1
ATCGCTAGCATNNNNNNNNNNNNNNCTAGCATCATGCNNNNNNATACGCATCACANNNNNNNNNCgcatATCAC
Run Code Online (Sandbox Code Playgroud)
和预期的输出应该是这样的:
Position 12 N 14
Position 38 N 6
Position 56 N 9
Run Code Online (Sandbox Code Playgroud)
请帮助我通过awk
或sed
提供我的文件名来解决这个问题mySequence.fasta
我有以下问题:
我的数据表看起来像这样
AAAGGGTTT AAAGGG
AAAGGGCCC GGGCCC
Run Code Online (Sandbox Code Playgroud)
我想像这样在第三行中显示两个序列之间的差异
AAAGGGTTT AAAGGG TTT
AAAGGGCCC GGGCCC AAA
Run Code Online (Sandbox Code Playgroud)
我试过的是使用差异。我提取了文件(f1.txt 和 f2.txt)中的各个序列并对其进行了格式化,以便可以将它们与 diff 逐行比较,这造成了它仅在序列的开头相似时才起作用的问题(数据表的第 1 行) )。
awk '{gsub(".","&\n");printf "%s",$0}' < f1.txt >f1a.txt
awk '{gsub(".","&\n");printf "%s",$0}' < f2.txt >f2a.txt
diff -y f1a.txt f2a.txt
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何实现所需的输出?
有类似的问题,但没有一个完全解决我遇到的问题。
简而言之,我需要打印包含我要查找的任何字符串的每个块。每个块起始行包含: <entry version=
欲了解更多详情,请参阅下文:
如果在模式区域(块)内识别出某个字符串,我想搜索打印模式之间的每个整个区域(块)的大型文件(数十万行)。
我知道我可以打印模式之间的整个区域,其中这些块的开始和结束标识符是“/<entry version=”,使用:
awk '/<entry version=/{flag=1} flag; /<entry version=/{flag=0}'
但是如果在这些模式之间找到某些字符串,如何让它只打印整个块?
对于块区域来说,真实数据的最短部分看起来像这样(尽管实际上每个块都有数千行长),我要感谢 Terdon 整理了一个更好的示例供我使用:
<entry version="21.1" url="http://v21.proteinatlas.org/ENSG00000000003">
<name>TSPAN6</name>
<synonym>T245</synonym>
<synonym>TM4SF6</synonym>
<synonym>TSPAN-6</synonym>
<identifier id="ENSG00000000003" db="Ensembl" version="103.38" assembly="GRCh38.p13" gencodeVersion="37">
<xref id="O43657" db="Uniprot/SWISSPROT"/>
<xref id="7105" db="NCBI GeneID"/>
</identifier>
<proteinClasses>
<proteinClass source="MDM" id="Ma" parent_id="" name="Predicted membrane proteins"/>
Run Code Online (Sandbox Code Playgroud)
在上面的真实格式中,我将检查特定字符串的名称和同义词,因此如果我正在寻找“TSPAN6”,那么将打印该块。每个块都有数千行,因此下面只是一个虚构的迷你版本,用于解释我如何根据块内的字符串匹配来打印块。
这是一个示例,如果我的字符串是“MEMSAT”和“TNMD”
示例输入:
<entry version="21.1" url="http://v21.proteinatlas.org/ENSG00000000003">
<name>TSPAN6</name>
<synonym>T245</synonym>
<synonym>TM4SF6</synonym>
<synonym>TSPAN-6</synonym>
<identifier id="ENSG00000000003" db="Ensembl" version="103.38" assembly="GRCh38.p13" gencodeVersion="37">
<xref id="O43657" db="Uniprot/SWISSPROT"/>
<xref id="7105" db="NCBI GeneID"/>
</identifier>
<proteinClasses>
<proteinClass source="MDM" id="Ma" parent_id="" name="Predicted membrane proteins"/>
<proteinClass …
Run Code Online (Sandbox Code Playgroud) 我在 Linux 机器上有一个包含两列的文本文件:
12345 0102010205
54322 2221110051
123456 1122011510
Run Code Online (Sandbox Code Playgroud)
我想将文件更改为如下所示:
12345 0 1 0 2 0 1 0 2 0 5
54322 2 2 2 1 1 1 0 0 5 1
123456 1 1 2 2 0 1 1 5 1 0
Run Code Online (Sandbox Code Playgroud)
如何更改第一列,使其向右对齐(如数字所示)?
有人可以帮我用最可靠的方法来更改第二列数字之间的空格吗?请解释代码的元素及其作用。
谢谢
bioinformatics ×10
awk ×7
sed ×5
shell-script ×2
bash ×1
command-line ×1
perl ×1
shell ×1
xml ×1