标签: bioinformatics

合并文件中的字段

我有一个包含 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)

shell bash sed awk bioinformatics

4
推荐指数
1
解决办法
815
查看次数

根据文件中解析的参数值将文件内容拆分为其他文件

常规文件包含按列组织的数据,以空格分隔。根据第二个字段的值,我想将该初始数据文件拆分为几个其他文件。

数据文件有 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)

awk text-processing bioinformatics

4
推荐指数
1
解决办法
140
查看次数

前两个字段由 _ 和其余字段分开

#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)

sed awk text-processing bioinformatics

3
推荐指数
1
解决办法
423
查看次数

理解解开 fasta 文件的 awk 公式

我刚刚找到了一个可用于解开 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)

我的问题是:有人可以向我解释它是如何工作的吗?

awk bioinformatics

3
推荐指数
1
解决办法
1045
查看次数

围绕“sed”命令循环处理单个目录中的许多文件

我有包含许多行的文本文件,其中一些以“>”开头(这是一个所谓的 *.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 个文件?

command-line sed shell-script bioinformatics

3
推荐指数
1
解决办法
2943
查看次数

跨多行特定位置的一系列数字

我有一个看起来像这样的数据集:

>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。

有任何想法吗?

text-processing bioinformatics

3
推荐指数
1
解决办法
147
查看次数

计算一个特定的连续字符及其出现位置和长度

我有一个序列文件,想用它的出现位置和长度来计算连续字符“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)

请帮助我通过awksed提供我的文件名来解决这个问题mySequence.fasta

sed awk perl bioinformatics

3
推荐指数
1
解决办法
648
查看次数

如何通过命令行工具显示两个 DNA 序列之间的差异

我有以下问题:

我的数据表看起来像这样

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)

有没有人知道如何实现所需的输出?

shell-script text-processing bioinformatics

3
推荐指数
1
解决办法
352
查看次数

识别模式之间的字符串,如果找到字符串,则打印模式之间的整个区域。最好使用awk

有类似的问题,但没有一个完全解决我遇到的问题。

简而言之,我需要打印包含我要查找的任何字符串的每个块。每个块起始行包含: <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)

xml awk text-processing bioinformatics

3
推荐指数
2
解决办法
495
查看次数

如何拆分文本文件中给定列的字符串值

我在 Linux 机器上有一个包含两列的文本文件:

  • 第1列 = id_no(大部分为5位,有的为6位);
  • 第 2 列 = Genetic_markers(全部长度为 50674 位);
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)
  1. 如何更改第一列,使其向右对齐(如数字所示)?

  2. 有人可以帮我用最可靠的方法来更改第二列数字之间的空格吗?请解释代码的元素及其作用。

谢谢

sed awk text-processing bioinformatics

2
推荐指数
2
解决办法
407
查看次数