前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生物信息常用文件格式

生物信息常用文件格式

作者头像
生信喵实验柴
发布2022-10-25 19:24:44
2.1K0
发布2022-10-25 19:24:44
举报
文章被收录于专栏:生信喵实验柴生信喵实验柴

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

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

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

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

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

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

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

二、字符串与数值

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

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

三、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 系统下回车加换行两个字符\r\n;

在 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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档