生物信息常用文件格式

2022-10-25 19:24:44 浏览数 (1)

一、结构化数据与非结构化数据

什么是数据?数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。数据可以是连续的值,也可以是离散的。

通常数据被认为是数字,但现在数据的含义被拓宽了,它不仅指狭义上的数字,还可以是广义上具有一定意义的文字、字母、数字符号的组合、图形、图像、音频、视频等等,是客观事物的属性、数量、位置及其相互关系的抽象表示。

什么是生物数据?生物数据主要是从生物体上获取的数据,包括基因组,转录组以及蛋白质组等数据。根据数据的组成方式可以分为结构化的数据与非结构化的数据。

结构化数据:信息能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号;

非结构化数据:信息无法用数字或统一的结构表示,如文本、图像、声音、网页等,我们称之为非结构化数据。

简单来说,有规则的表格一般都属于结构化数据,在生物信息分析中,基因组数据是非结构化的,需要通过生物软件处理得到结构化的表格。

二、字符串与数值

数据类型主要表示数据代表哪种内容,是字符串还是数值,逻辑值,或者时间日期等。数值可以用于计算,字符串不能用来计算,逻辑值用来判断等。

在生物信息分析,基因组数据主要都是字符串类型,所以,生物信息分析往往也被认为是字符串处理。

三、CSV 文件与 TSV 文件

生物信息中会有大量表格文件产生,例如 gff 文件,gtf 文件,bed 文件,sam 文件,vcf 文件,blast 比对结果,blat 结果,以及很多生物软件产生的结果都是表格格式。表格文件主要分成逗号分割的csv格式和制表符分割的tsv文件。注意制表符分割与空格分割是不同的,要注意区分分隔符,例如 bed 格式文件,如果换成空格分隔符会出现问题。

3.1 csv 文件

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。

代码语言:javascript复制
name,age
张三,20
李四,30

3.2 tsv文件

TSV:tab separated values;即“制表符分隔值”,制表符分割的文件在生物信息分析中更加常见。tsv 的文件扩展名有多种,可以是 tsv,txt 等。

代码语言:javascript复制
name age
张三 20
李四 30

四、换行符

在文本文件处理过程中,换行是一个非常重要的概念。由于我们常常需要在 Linux 和 windows不同平台之间切换操作,常常就会遇到换行引起的问题,这给文件处理造成很多麻烦,有时候还会出现错误的结果。

顾名思义,换行符就是另起一行,在一样文本结束的时候给系统一个标示。用“n”表示,否则输出结果都连接到一起了。回车符就是回到一行的开头,用反”r”表示,所以我们平时编写文件的回车符应该确切来说叫做回车换行符。无论是回车还是换行符都是没有显示的,都属于空白。问题是不同系统之间用来控制换行的标识符不同。

代码语言:javascript复制
在 linux 系统下是换行n;
在 mac 系统下是回车r;
而在 windows 系统下回车加换行两个字符rn;

在 linux 下用 cat 命令加-A 选项就会显示出文件结尾换行标识符。换行显示为 dollar 符,而回车则显示为倒三角大 M 标识。我们可以比较三种系统平台结尾标识符的差异,其中windows 系统文件结尾是回车加换行两个符号。

那么怎么解决这个问题呢。Linux 下有 dos2unix,unix2dos,unix2mac,mac2unix 等命令来进行格式转换,使用起来非常的方便,直接输入文件即可。在源文件上进行转换。

五、生物信息常见文件格式

生物信息本质上是利用生物软件处理生物数据,不过在执行的过程中就变成了各种文件格式的相互转换。有生物信息学家开玩笑说自己每天的工作就是文本格式转换,其实是这样的,例如测序就是将 DNA 样品转换为 fastq 格式,拼接就是从 fastq 到 fasta,比对就是从 fastq到 bam,编译检测从 bam 到 vcf 等。数据分析就是从文本到表格,表格到图表。所以,了解生物数据的文件格式,并且能够使用相应的工具处理很重要。生物信息最常用的就是 fastq,fasta,bam 以及 vcf 四种格式,此外还有 genbank,maf,psl,axt,gff,gtf,bed 等格式。UCSC 上有一个页面专门介绍每一种生物信息文件格式的具体内容。当需要了解每种格式的内容,可以到该网站进行查看。

文件格式介绍:https://genome.ucsc.edu/FAQ/FAQformat.html#format1

六、管理数据流

1 重定向

linux 系统软件的标准输入,标准输出以及错误输出。标准输入输出是软件工具设计原理里最基本的观念。程序需要有一个数据来源,数据出口,以及报告问题的地方。我们使用生物软件来处理生物数据。输入文件就是我们要处理的原始文件,比如测序的序列,将数据交给软件,最终软件正确输出的结果就是我们要的结果。如果软件执行有问题,则会输出错误提示。我们拿一条序列去 NCBI 做 blast 比对也是一样的道理,输入一个序列,交给后台软件处理,等待返回结果。

Linux 启动后,会默认打开 3 个文件描述符,分别是:标准输入 standard input 0,标准输出;standard output 1,错误输出:error output 2。标准输入 (stdin) :代码为 0 ,可以直接从键盘输入,也可以通过文件输入。在所有的编程语言中,也会涉及到这三个内容。

如果不需要输出内容,既不让屏幕输出,也不想要保存到一个文件中,这个时候可以使用/dev/null 这个“黑洞”文件。这样输出内容将直接丢弃。

代码语言:javascript复制
#写入黑洞文件
ll ../data/demo.sam 1>/dev/null
#使用错误输出
ll ../data/demo.sam 1>/dev/null 2>stderr.txt

2 管道

管道就是一条竖线,是键盘上位于退格键与回车键之间的键,同时按下键盘上的 Shift 反斜杠()键即可输入管道符,其执行格式为“命令 A | 命令 B”。管道命令符的作用也可以用一句话概括为“把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入”。

其实管道的作用与现实中的管道意义相似,都是改变“流”的方向,一个是改变水流电流风流等,另外一个是改变数据流的方向。通过管道可以将很多软件连接起来,例如一个软件的输入作为下一个软件的输出。使用管道符无需保存中间文件,将很多命令连接起来极大的提高的工作效率。

代码语言:javascript复制
#使用管道
ps -aux | grep "root" | wc

3 参数传递 xargs

xargs 命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成特定命令的命令参数。

xargs 是一个强大的命令,它能够捕获一个命令的输出结果,然后传递给另外一个命令。之前管道也是传输数据的作用,但是 xargs 与管道不同,管道传递的是数据流,而 xargs 则能够进行参数传递。所以,xargs 也是一个非常高效的命令。

xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。

代码语言:javascript复制
#1 将内容拆成多列显示
cat ../data/xargs.txt | xargs
cat ../data/xargs.txt | xargs -n 3

#2分割符
cat /etc/passwd | xargs -d ":"

#将一行内容分成三列
echo {a..z} | xargs -n 3

#4 将目录下全部fa找出来,拷贝到当前目录下
find ../corona/ -name "*.fa" | xargs -t -I{} cp {} ./

#搜索名字为sleep的进程,然后kill掉
sleep 20 &
ps -u $USER | awk '/sleep/ {print $1}' | xargs echo kill #echo显示下命令再去掉后执行
ps -u $USER | awk '/sleep/ {print $1}' | xargs kill -9
pidof sleep | xargs kill -9

将目录下所有sh结尾文件复制到cp文件夹内

代码语言:javascript复制
find /share/home/ -name "*.sh" | xargs -t -I{} cp {} sh

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。原地址暂未启用(bioinfoer.com)。

代码语言:javascript复制
sx.voiceclouds.cn

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

0 人点赞