Linux课程整理
1、学习资料
马哥linux视频,Linux 命令行与Shell脚本编程大全
2、系统认知
看学习资料
3、Shell基本命令
Shell的基本操作(shell就是一个翻译官)
Shell为一命令解释器(command interpreter
),将使用者的命令翻译给核心处理;同时将核心处理结果翻译给使用者。
通常由三部分组成:1.命令字,2.参数,3.操作对象;cmd [options][operation]
Shell prompt
提示符:$
:给一般使用者账号使用;#
:给root(管理员)账号使用;
cursor
光标,是指示键盘在命令行所输入的位置;
carriage return
回车,命令行读进,是使用者告诉shell可以执行命令行了;
Internal field separator(IFS)
,域内字段分隔符,包括space
, tab
和newline
.
Shell工作原理,会依据IFS将command line所输入的文字给拆解为“字段”(word),然后再针对特殊字符(meta)先作处理,最后再重组整行command line。
(1) 查看文件ls
ls -l #查看当前目录下的文件
ls -al #查看当前目录下的所有文件(包括隐藏文件)
ls -lh #查看当前目录下的文件,并显示其大小(K,M,G等)
(2) 访问文件cd
cd #change directory
cd .. #返回上一级
cd ~ #返回用户主目录
cd - #返回到来这之前的目录
cd / #返回根目录
(3)新建文件夹mkdir
mkdir dgc #在当前文件夹下创建名为dgc的文件夹
mkdir file1 file2 file3 #创建3个平级目录
mkdir file{1:3} #同样可以创建3个平级目录
mkdir -p 1/2/3/4/5/6 #创建多层子目录
(4) 删除文件rmdir rm
rmdir dgc #dgc为空目录,不可删除非空文件夹#
rmdir -p a/b/c/d #多级删除文件夹
rm a #删除文件a,不可以删除目录a
rm file1 file2 file3 #删除多个文件
rm -rf a1 #无论a1下是否有文件都将a1删除(谨慎使用,linux删除文件后不可逆)
(5) 创建文件touch
touch a.txt
touch file1 file2 file3 #同时创建多个文件
(6) 复制cp
cp src.c src.c.bak #复制src.c并重新命名为src.bak;
cp src.c a/src.c.bak #复制src.c到a目录下并重新命名为src.bak;
cp -r a/ b/ #拷贝文件夹a及其里面的子文件夹到b;
(7) 重命名或者移动mv
mv src.c.bak src.bak #将src.c.bak改名为src.bak;
mv jeapdu.s a/ #将jeapdu.s文件移动到目录a中;
mv a/jeapdu.s src #将目录a文件夹下的jeapdu文件移动到当前目录并改名为src;
mv a src #修改目录名;
#一般情况下:不同级目录为移动,同级目录为改名字
(8) tar命令
tar在Linux上是常用的打包、压缩、加压缩工具
参数:
-c :create 建立压缩档案的参数;
-x : 解压缩压缩档案的参数;
-z : 是否需要用gzip压缩;
-v: 压缩的过程中显示档案;
-f: 置顶文档名,在f后面立即接文件名,不能再加参数
①将tgz文件解压到指定目录
tar -zxvf test.tgz -C #指定目录
比如将/source/kernel.tgz解压到 /source/linux-2.6.29 目录
tar -zxvf /source/kernel.tgz -C /source/linux-2.6.29
②将整个/home/www/images 目录下的文件全部打包为 /home/www/images.tar
tar -cvf /home/www/images.tar /home/www/images #仅打包,不压缩
tar -zcvf /home/www/images.tar.gz /home/www/images #打包后,以gzip压缩
tar -cvf ab.tar a b #将a和b文件压缩到ab.tar
tar -xvf ab.tar #解压缩
tar -tvf ab.tar #查看压缩文件
tar -xvf ab.tar a #将ab.tar仅解压a文件
tar -xvf ab.tar -C ss/ #将ab.tar文件解压缩到ss目录下
tar -zcvf ac.tar.gz ac.tar #将ac.tar压缩并创建为ac.tar.gz
tar -jcvf ac.tar.bz2 ac.tar #将ac.tar压缩并创建为ac.tar.bz2
tar -zxvf ac.tar.gz #解压缩ac.tar.gz文件
tar -jxvf ac.tar.bz2 #解压缩ac.tar.bz2文件
(9) 压缩文件gzip bzip2
(源文件都会消失)
gzip aa.tar #压缩aa.tar文件;
gunzip aa.tar.gz #解压缩aa.tar.gz文件;
bzip2 ab.tar #压缩ab.tar文件;
bunzip2 ab.tar.bz2 #解压缩ab.tar.bz2文件;
(10) 查找文件
which #可定位可执行文件所在目录;
whereis #命令定位文件所在目录:二进制的、源文件、帮助文档;
whereis -m pwd #只查找帮助文档;
whereis pwd #输出3条:命令本身所在目录,源文件所在目录,其帮助文件所在目录;
locate #基于本地数据库(每天需要更新一次,update)进行查找 locate aa.tar.gz,不能查找新创建的文件;手动更新数据库sudo updated后,可以用locate进行查找新创建的文件;
find #基于文件名在磁盘中查找,格式:“find 查找目录 查找内容”
find ./ -name 'af*'
(11) 查看文件
head #查看文件最开始的几行,默认为10行,可使用-n 6指定查看前6行
head -n 6 filename
tail #查看文件最后几行
less和more也可以用来查看文件,尤其是文件内容特别多的时候
more分屏打印文件,继续往下看按空格键,往前看shift+pageup
less也可以分屏打印文件
less -SN abc.txt #查看abc.txt文件,并进行对齐输出行号
(12) cat
命令
cat filename #显示整个文件
cat > filename #创建一个文件
cat file1 file2 > file #将几个文件合并为一个文件
Cat <<END #可以输入内容,再回车,继续输入内容,直到我们输入END,输入过程结束
Cat <<END >data/test.fa #将cat输入的内容存入data目录下的test文档中,并保存为fa格式
(13)sort
命令
sort
为排序命令,比较原则是从首字符开始,依次按ASCII码值进行比较,最后将比较结果按升序输出。
用法:sort [选项]... [文件]...
或:sort [选项]... --files0-from=F
常用参数
-k, --key=位置1[,位置2] #在位置1 开始一个key,在位置2 终止(默认为行尾)
-r, --reverse #逆序输出排序结果
-t, --field-separator=分隔符 #使用指定的分隔符代替非空格到空格的转换
-n, --numeric-sort #根据字符串数值比较
-f, --ignore-case #忽略字母大小写
# Example
sort -k 1,1 -k 2,2n test.bed #对第一列按照字符排序,第二列按照数值排序
sort -k 1,1 -k 2,2nr test.bed #对第一列按照字符排序,第二列按照数值反向排序
(14) 其他命令
echo a #屏幕显示a
ln -s a.txt b.txt #将a.txt软链接到b.txt
pwd #输出当前路径
4、文本编辑常用命令
(1) 取字符串
file=/dir1/dir2/dir3/my.file.txt
${file#*/} #删掉第一个/及其左边的字符串:
dir1/dir2/dir3/my.file.txt
${file##*/} #删掉最后一个/及其左边的字符串
my.file.txt
${file#*.} #删掉第一个.及其左边的字符串
file.txt
${file##*.} #删掉最后一个.及其左边的字符串
txt
${file%/*} #删掉最后一个/及其右边的字符串
/dir1/dir2/dir3
${file%%/*} #删掉第一个/及其右边的字符串
(空值)
${file%.*} #删掉最后一个.及其右边的字符串
/dir1/dir2/dir3/my.file
${file%%.*} #删掉第一个.及其右边的字符串
/dir1/dir2/dir3/my
(2) vim
编辑
vim一共有三种模式,包括命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line modle)
vim abc.txt #进入abc.txt的编辑模式
i
进入输入模式,Esc
退出输入模式,进入命令模式,:
进入底线命令模式
常用命令
i #进入输入模式,修改位置为光标所在位置
a #进入输入模式,修改位置为光标下一位
I #进入输入模式,调到某一行行首
A #进入输入模式,调到某一行行尾
/find #向下查找
?find #向上查找
x #删除光标所在字符
10x #连续向后删除10个字符
yy #复制当前行,结合光标、行数和p可以进行多行的指定位置复制(eg 2yy然后p)
dd #删除当前行,dd搭配p,重复删除光标所在行
u #撤销
ctrl+r #退回
:%s/before/after/ #替换,也可用sed进行操作(eg:sed -i 's/before/after/' file)
:wq && wq! #保存和强制保存/覆盖
:q && :q! #退出和强制退出
:w new_file_name #简言之另存为,可保留源文件。
(3) grep
命令
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
常用参数
-i #匹配时忽略大小写
-v #取没有匹配的行
-w #精确匹配
-e #匹配多个内容
-A #后面可加数字,为after的意思
-B #后面可加数字,为before的意思
-C #指定输出包括匹配到的前后多少行
-f #file,从file种获得匹配的数据
-n #显示行号
-c #统计匹配后的行数
--color #标记匹配的内容
-o #输出匹配的内容
(4)sed
命令
sed工作流程:读取-执行命令-显示;
使用方式:
Sed [-n][-e] ‘command’ files
sed [-n] –f script files
参数:
-n #禁止显示所有输入内容,只显示经过sed处理的行(常用);
-e #直接在命令列模式上进行 sed 的动作编辑,接要执行的一个或者多个命令;
-f #执行含有sed 动作的文件 ;
-r #sed 的动作支持的扩展正则(默认基础正则)
-i #直接修改读取的文件内容,不输出
作用区域:默认情况下,sed命令会作用于文本数据的所有行,如果只想作用于某些行时,则需要使用在命令通过行号或者文本过滤的方式前指明作用区域。
行号:m, +n表示从m行开始向下n行,m~n表示从m行开始的每n行。
文本过滤:’ /pattern/ command’ 可以只在包含pattern的行中执行命令,
命令:p复制,d删除,i插入,a追加,c行替换,y字符转换,w写入新文件,r读取文件,i反向执行,s替换,
(5)cut
命令
cut
命令可以处理列数据,是一个选取命令,可将文件种的每一行按照“字节”“字符”“字段”进行剪切,并将这些选取好的数据输出至标准输出。cut的格式:cut –[n]b file;cut –c file;cut –d[分隔符] –f[域] file。
常用参数
-d #指定分隔符
-f #指定列
-b #以字节为单位进行切割
-c #以字符为单位进行切割
-n #取消分割多字节字符,仅和-b标志一起使用。
#Example
cut -b 1 text1.txt
cut -b 1.3.5 text1.txt
cut -b 1-5 text1.txt 等同于cut -b -5 test1.txt
cut -b 3- test1.txt
cut -nb 3 test2.txt
cut -c 1 test2.txt
cut -d : -f 1
(6)awk
命令
在shell知识里,如果把一个文档看做一张表,那么一行就是一个记录,一列就是一个域。awk是一门语言,按行处理数据,也就是按记录处理文本的,是一个强大的文本分析工具。
其命令的基本方式:
awk [option] '{pattern + action}' {filenames} # sometims muti file is ok
awk [option] 'BEGIN{初始代码} {循环代码} END{最后代码}' filename
常见变量
FS #字段分隔符(默认是任何空格)
NR #行号,从1开始
NF #一条记录的字段数目
$n #当前记录的第n个字段,字段间由FS分隔
$0 #完整的输入记录
常见的基本用法(参考awk相关书籍)
5、软件安装
在生物信息学领域,现在用的最多的是conda
进行软件安装
(1) 下载miniconda
wget –c <https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh>
(2) 安装miniconda
bash [Miniconda3-4.5.4-Linux-x86_64.sh](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh) #(不要将conda加入到环境变量里面,以免污染配置好的环境)
(3) 启动miniconda
source ~/miniconda3/bin/activate
(4) 配置conda的环境
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ #(非常重要)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
(5) 查看conda的配置文件
vim ~/.condarc
(6) 安装软件(可以在bioconda.github.io搜索)
conda install -y bwa(samtools=1.8)
(7) 创建新的环境
conda create -n chipseq python=2
(8) 启动和退出chipseq的环境
conda activate chipseq
conda deactivate
(9) 删除环境
conda remove –n chipseq –all #或者
$rm –rf ~/miniconda3/envs/chipseq/
6、环境变量和局部变量
(1) 查看环境变量
Env或者export
(2) 显示变量值:echo ,echo才能将变量名替换成实际变量值
echo $PATH
(3) 配置环境变量
#第一种方法
export PATH=/usr/local/webserver/mysql/bin:$PATH ## 先添加
echo $PATH ### 再查看
#第二种方法
vim ~/.bashrc
export PATH="/home/vip5/soft/gatk/bin:$PATH" #在最后添加
source ~/.bashrc
习题
fasta和fastq文件
- 统计reads_1.fq 文件中共有多少条序列信息
reads_1.fq |paste - - - - |wc
- 输出所有的reads_1.fq文件中的标识符(即以@开头的那一行)
less -S reads_1.fq |grep ^@|wc
less -S reads_1.fq |paste - - - - |cut -f 1|wc
- 输出reads_1.fq文件中的 所有序列信息(即每个序列的第二行)
less -S reads_1.fq |paste - - - - |cut -f 2
- 输出以‘+’及其后面的描述信息(即每个序列的第三行)
less -S reads_1.fq |paste - - - - |cut -f 3
- 输出质量值信息(即每个序列的第四行)
less -S reads_1.fq |paste - - - - |cut -f 4
- 计算reads_1.fq 文件含有N碱基的reads个数
less -S reads_1.fq |paste - - - - |cut -f 2|grep N|wc
- 统计文件中reads_1.fq文件里面的序列的碱基总数
reads_1.fq |paste - - - - |cut -f 2|grep -o [ATCGN]|wc
- 计算reads_13.fq 所有的reads中N碱基的总数
less -S reads_1.fq |paste - - - - |cut -f 2|grep -o N|wc
- 统计reads_1.fq 中测序碱基质量值恰好为Q20的个数
less -S reads_1.fq |paste - - - - |cut -f 2|grep -o B|wc
- 统计reads_1.fq 中测序碱基质量值恰好为Q30的个数
less -S reads_1.fq |paste - - - - |cut -f 2|grep -o F|wc
- 统计reads_1.fq 中所有序列的第一位碱基的ATCGN分布情况
less -S reads_1.fq |paste - - - - |cut -f 2|grep -o ^[ATCGN]|sort|uniq -c
- 将reads_1.fq 转为reads_1.fa文件(即将fastq转化为fasta)
less -S reads_1.fq|paste - - - -|cut -f1,2|tr "\t" "\n"|tr "@" ">" >read_1.fa
- 统计上述reads_1.fa文件中共有多少条序列
awk 'NR%2==0{print $0}' read_1.fa |wc
- 计算reads_1.fa文件中总的碱基序列的GC数量
less -S read_1.fa |paste - - |cut -f 2|grep -o [GC]|wc
- 删除 reads_1.fa文件中的每条序列的N碱基
less -S read_1.fa |paste - - |cut -f 2|sed 's/N//'
tr -d N read_1.fa
- 删除 reads_1.fa文件中的含有N碱基的序列
awk 'NR%2==0{print $0}' read_1.fa|grep -v N|tr “\t” “\n”
cat read_1.fa|paste - -|grep -v N|tr “\t” “\n”
- 删除 reads_1.fa文件中的短于65bp的序列
awk 'NR%2==0{print $0}' read_1.fa|awk 'length($0)>64{print $0}'
cat read_1.fa|paste - -| awk 'length($0)>64{print $0}'|tr '\t' '\n'
- 删除 reads_1.fa文件每条序列的前后五个碱基
awk 'NR%2==0{print $0}' read_1.fa|sed 's/^.....//'|sed 's/.....$//'
cat read_1.fa|paste - -|cut -f 1 >reads_1_1.fa
awk 'NR%2==0{print $0}' read_1.fa|sed 's/^.....//'|sed 's/.....$//' >reads_1_2.fa
paste reads_1_1.fa reads_1_2.fa|tr '\t' '\n' >reads_1_3.fa
sed -n '1~4 p' reads_1.fq | tr "@" ">" >read_1_1.fa
sed -n '2~4 p' reads_1.fq | sed 's/^.\{5\}//g' | sed 's/.\{5\}$//g' > read_1_2.fa
paste read_1_1.fa read_1_2.fa | tr '\t' '\n' > reads_1.fa
less -S read_1.fa |awk '{if($0~/^>/)print $0;else print substr($0,6,length($0)-10)}'|less -S
19)删除 reads_1.fa文件中的长于125bp的序列
awk 'NR%2==0{print $0}' read_1.fa|awk 'length($0)<125{print $0}'
cat read_1.fa|paste - -| awk 'length($0)<125{print $0}'|tr '\t' '\n
- 查看reads_1.fq 中每条序列的第一位碱基的质量值的平均值
perl -lane '{ord()}' tmp.fa
sam文件和bam文件
- 统计共多少条reads(pair-end reads这里算一条)参与了比对参考基因组
cat tmp.sam |grep -v ^@|wc
- 统计共有多少种比对的类型(即第二列数值有多少种)及其分布。
cat tmp.sam |grep -v ^@|cut -f 2|sort |uniq –c
- 筛选出比对失败的reads,看看序列特征。
less tmp.sam |awk '$6=="*"{print $0}' >tmp_unmap.sam
- 比对失败的reads区分成单端失败和双端失败情况,并且拿到序列ID
less -S tmp.sam |awk '$6=="*"{print $1}'|sort|uniq -c|grep -W 1 #单端
less -S tmp.sam |awk '$6=="*"{print $1}'|sort|uniq -c|grep -W 2 #双端
- 筛选出比对质量值大于30的情况(看第5列)
less -S tmp.sam |awk '$5>30{print $0}'
- 筛选出比对成功,但是并不是完全匹配的序列
less -S tmp.sam |awk '$6~"[IDNSHPX]"{print $0}'
less -S tmp.sam |awk '$6!="*"{print $6}'|grep [IDNSHPX]
- 筛选出inset size长度大于1250bp的 pair-end reads
less -S tmp.sam|awk '$9>1250{print $0}'
- 统计参考基因组上面各条染色体的成功比对reads数量
less -S tmp.sam |grep '^@'|grep 'LN'
- 筛选出原始fq序列里面有N的比对情况
less -S tmp.sam |grep -v '^@'|awk '{print $10}'|grep N
less -S tmp.sam |grep -v '^@'|awk '$10~"N"{print$10}'
- 筛选出原始fq序列里面有N,但是比对的时候却是完全匹配的情况
less -S tmp.sam |grep -v '^@'|awk '$6!~"[IDNSHPX]" && $$6!="*" && $10~"N"{print $0}'|less -S
- sam文件里面的头文件行数
less -S tmp.sam|grep -c '^@'
- sam文件里每一行的tags个数一样吗
less -S tmp.sam|cut -f 12-20|less -S
- sam文件里每一行的tags个数分别是多少个
less -S tmp.sam |grep -v '^@'|awk '{print NF}'|sort |uniq -c #结果减去11
- sam文件里记录的参考基因组染色体长度分别是?
less -S tmp.sam |grep '^@'|grep 'LN'
- 找到比对情况有insertion情况的
less -S tmp.sam |grep -v '^@'|awk '$6~"I"{print$0}'
- 找到比对情况有deletion情况的
less -S tmp.sam |grep -v '^@'|awk '$6~"D"{print$0}'
17)取出位于参考基因组某区域的比对记录,比如 5013到50130 区域
less -S tmp.sam |grep -v '^@'|awk '$8>5013 && $8<50130{print $0}'|less -S
- 把sam文件按照染色体以及起始坐标排序
sort -k 3,3 -k 4,4n tmp.sam|less -S #对第3列进行字母排序后对第4列进行数值排序(升序)
- 找到 102M3D11M 的比对情况,计算其reads片段长度。
less -S tmp.sam |grep -v '^@'|grep 102M3D11M|cut -f 10|wc
- 安装samtools软件后使用samtools软件的各个功能尝试把上述题目重新做一遍。
生信人的linux考试
一、在任意文件夹下面创建形如 1/2/3/4/5/6/7/8/9
格式的文件夹系列。
mkdir -p 1/2/3/4/5/6/7/8/9
二、在创建好的文件夹下面,比如我的是 /Users/jimmy/tmp/1/2/3/4/5/6/7/8/9
,里面创建文本文件 me.txt
touch /Users/jimmy/tmp/1/2/3/4/5/6/7/8/9/me.txt
三、在文本文件 me.txt
里面输入内容:
Go to: http://www.biotrainee.com/
I love bioinfomatics.
And you ?
vim me.txt
Go to: http://www.biotrainee.com/
I love bioinfomatics.
And you ?
:wq
四、删除上面创建的文件夹 1/2/3/4/5/6/7/8/9
及文本文件 me.txt
rm -r 1/
五、在任意文件夹下面创建 folder1~5
这5个文件夹,然后每个文件夹下面继续创建 folder1~5
这5个文件夹
mkdir -p folder{1..5}/folder{1..5}
六、在第五题创建的每一个文件夹下面都 创建第二题文本文件 me.txt
,内容也要一样。
echo folder{1..5}/folder{1..5}|xargs -n 1|while read id;do cp me.txt $id; done
七,再次删除掉前面几个步骤建立的文件夹及文件
rm -r *
八、下载 http://www.biotrainee.com/jmzeng/igv/test.bed
文件,后在里面选择含有 H3K4me3
的那一行是第几行,该文件总共有几行。
wget http://www.biotrainee.com/jmzeng/igv/test.bed
less -S test.bed|grep -n 'H3K4me3'
wc test.bed
九、下载 http://www.biotrainee.com/jmzeng/rmDuplicate.zip
文件,并且解压,查看里面的文件夹结构
wget http://www.biotrainee.com/jmzeng/rmDuplicate.zip
unzip rmDuplicate.zip
tree rmDuplicate
十、打开第九题解压的文件,进入 rmDuplicate/samtools/single
文件夹里面,查看后缀为 .sam
的文件,搞清楚 生物信息学里面的SAM/BAM
定义是什么。
cd rmDuplicate/samtools/single
ls *.sam
sam文件为fastq比对后得到的文件
bam文件为sam文件的二进制格式,文件较小,易于储存
十一、安装 samtools
软件
conda install -y samtools
十二、打开 后缀为BAM
的文件,找到产生该文件的命令。
samtools view tmp.rmdup.bam
samtools view -bS abc.sam -o abc.bam
十三题、根据上面的命令,找到我使用的参考基因组 /home/jianmingzeng/reference/index/bowtie/hg38
具体有多少条染色体。
less -S /home/jianmingzeng/reference/index/bowtie/hg38|cut -f 1|sort|uniq
十四题、上面的后缀为BAM
的文件的第二列,只有 0 和 16 两个数字,用 cut/sort/uniq
等命令统计它们的个数。
less -S .bam|cut -f 2|grep -w ['0'16']|sort|uniq -c
十五题、重新打开 rmDuplicate/samtools/paired
文件夹下面的后缀为BAM
的文件,再次查看第二列,并且统计。
cd rmDuplicate/samtools/paired`
samtools view tmp.rmdup.bam |wc
samtools view tmp.sorted.bam |wc
十六题、下载 http://www.biotrainee.com/jmzeng/sickle/sickle-results.zip
文件,并且解压,查看里面的文件夹结构, 这个文件有2.3M,注意留心下载时间及下载速度。
wget http://www.biotrainee.com/jmzeng/sickle/sickle-results.zip
unzip sickle-results.zip
tree sickle-results
十七题、解压 sickle-results/single_tmp_fastqc.zip
文件,并且进入解压后的文件夹,找到 fastqc_data.txt
文件,并且搜索该文本文件以 >>
开头的有多少行?
cd sickle-results/
unzip single_tmp_fastqc.zip
cd single_tmp_fastqc
less -S fastqc_data.txt|grep -c ^'>>'
十八题、下载 http://www.biotrainee.com/jmzeng/tmp/hg38.tss
文件,去NCBI找到TP53/BRCA1
等自己感兴趣的基因对应的 refseq数据库
ID,然后找到它们的hg38.tss
文件的哪一行。
wget http://www.biotrainee.com/jmzeng/tmp/hg38.tss
TP53的基因ID:NM_000546,NM_001126112,NM_001126113,NM_001126114,NM_001126115,NM_001126116,NM_001126117,NM_001126118,NM_001276695
less -S hg38.tss|grep -n -e NM_000546 -e NM_001126112
十九题、解析hg38.tss
文件,统计每条染色体的基因个数。
less -S hg38.tss|cut -f 2|grep -v '_'|sort|uniq -c
二十题、解析hg38.tss
文件,统计NM
和NR
开头的熟练,了解NM
和NR
开头的含义。
less -S hg38.tss|grep -c ^'NM'
less -S hg38.tss|grep -c ^'NR'
NM为转录本并可以翻译成蛋白
NR为转录本但不能翻译成蛋白