这一版本是重制版,完善了基础命令并增加了conda部分。
这里是佳奥。
跟随生信技能树的公开课程,我们开始正式的学习!
首先修改命令行配色:
echo 'export PS1="\[\033]2;\h:\u \w\007\033[33;1m\]\u \033[35;1m\t\033[0m \[\033[36;1m\]\w\[\033[0m\]\n\[\e[32;1m\]$ \[\e[0m\]"' >> ~/.bashrc
source ~/.bashrc
再修改一下终端的复制沾粘快捷键,在MobaXterm里面,左上角Settings-Keyboad里面
修改为我们常用的Ctrl + V就好
鼠标选中命令,右键即可复制。
MobaXterm上传文件:
1 系统认知
命令格式: 命令 + 选项 + 文件
查看帮助文档:
命令 --help
命令 -h
查看磁盘空间:
df -h
查看内存:
free -g
切换用户:从root到普通账户
su 用户名
退出账户:
exit
2 文件夹与文件管理命令
休眠指令:
sleep 秒数
后台休眠
sleep 10 &
文件目录 bin存储所有可以执行的命令
ls /bin
文件夹与文件管理的十个命令:
工作目录:
pwd 打印工作目录
ls 列出
cd 切换目录
创建:
mkdir 新建目录
touch 新建文件
操作文件:
mv 移动和重命名
rm 删除
cp 拷贝粘贴
压缩:
tar 压缩或解压缩
链接:
lm 链接文件
场景一:
$ pwd
/home/kaoku
$ cd biosoft/
$ ls
bowtie2 histlib samtools
快捷键:
Tab 补全
Ctrl + C 终止任务
Ctrl + L 清屏
Ctrl + U 剪切光标到行首
查看当前文件夹:
展示目录 ls
$ ls
bowtie2 histlib samtools
展示全部信息(包括隐藏文件) -a
展示容量 -h
以文件大小排序 -S
以时间排序 -t
展示详细信息 -l
$ ls -l
total 12
drwxr-xr-x 3 root root 4096 Jul 14 15:03 bowtie2
drwxr-xr-x 3 root root 4096 Jul 14 18:08 histlib
drwxr-xr-x 3 root root 4096 Jul 14 18:20 samtools
详细信息+大小 -lh
$ ls -lh
total 12K
drwxr-xr-x 3 root root 4.0K Jul 14 15:03 bowtie2
drwxr-xr-x 3 root root 4.0K Jul 14 18:08 histlib
drwxr-xr-x 3 root root 4.0K Jul 14 18:20 samtools
回到上一目录:
cd ../
回到home目录:
cd ~
查看进程:
ps -ef |grep 进程名
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:53 ? 00:00:00 /init
创建目录:
mkdir name
如果name存在便不创建,name不存在就创建。
mkdir -p name
还可以创造多级目录:
mkdir -p name1/name2/name3
创建十个文件夹
mkdir folder{1..10}
ls
folder1 folder10 folder2 folder3 folder4 folder5 folder6 folder7 folder8 folder9
tree命令:
$ tree
.
├── bowtie2
│ ├── bowtie2-2.4.5-linux-x86_64
│ │ ├── AUTHORS
│ │ ├── BOWTIE2_VERSION
以下略
显示当前目录层级:
tree -L 1
$ tree -L 1
.
├── bowtie2
├── histlib
├── my_first_test_file
└── samtools
创建文件:
touch name.txt
移动文件:
mv 待移动文件 移动到哪个目录
mv file file1 重命名
复制文件到目录:
cp 文件 目录
删除:
rm 删除文件
rm -r 删除目录
rm -rf 不显示警告,删除目录
软连接:
ln -s TARGET*(绝对路径) DIRECTORY
将内容打印到屏幕:
echo
显示路径:
echo $PATH
给文件写入内容:
$ echo "hallo">file2
$ cat file2
hallo
查看历史命令:
history
处理压缩文件:
tar
压缩:
tar -zcvf Data.tar.gz压缩后文件名 Data待压缩文件
c:创建压缩文件
解压:
tar -zxvf Data.tar.gz
x:解压缩
z:解压gzip文件
其他压缩命令:
zip unzip: .zip
gzip gunzip: .gz
bzip2 bunzip2: .bz2
3 文本处理
管道:|
cat 查看
head 文件前10行
head -100 前100行
tail 文件尾10行
less
less -N 显示行号
less -S 单行显示,空格翻页,q退出
less -zless 查看压缩文件
more 逐页查看,空格翻页,q推出
tac 逆向查看
cat 修改.txt文件内容:
$ cat > tmp.txt
hello
nihao
结束编辑按Ctrl V
^C
查看被编辑后的tmp.txt
$ cat tmp.txt
hello
nihao
wc 统计文本:
wc
-l:统计行数
-w:统计字符串数
-c:统计字节数
$ wc -lwc test.bed
10 88 3099 test.bed
10行
cut文本切割:
cut
-d 指定分隔符,默认\t
-f 输出哪几列
输出第一列:
cut -f 1 test.bed
track name="His (@ Brs) 50" url="http://chip-atlas.org/view?id=$$" gffTags="on"
chr1
chr1
chr1
提取前三列的数据:
cut -f 1-3 test.bed
track name="His (@ Brs) 50" url="http://chip-atlas.org/view?id=$$" gffTags="on"
chr1 9769 10673
chr1 9776 10481
chr1 9788 10497
输出第一,三到五,七列:
cut -f 1,3-5,7
sort排序:
sort
-n:按照数值大小从小到大
-v:字符串中含有数值,从小到大
-r:逆向排序
-k:指定区域
-t:指定分隔符
打开text.bed文件,选取第二列,显示前十行,按数字顺序排列
$ cat test.bed | cut -f 2 | head | sort -n
9769
9776
9788
9795
9799
9805
9810
9811
9825
uniq去除重复行:(相邻)
uniq
-c:统计每个字符串连续出现行数
一般sort+uniq连着用
paste文本合并:
paste
-d:指定分隔符
-s:按行合并
纵向拼接文件:
cat file1 file2 > file3
paste用法:
$ seq 20
1
2
3
...
18
19
20
$ seq 20 | paste - -
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
tr字符替换:
tr
-d:删除指定字符
-s:缩减连续重复字符
wget从指定的URL下载文件:
wget
从指定URL下载文件
# wget http://www.biotrainee.com/jmzeng/igv/test.bed
查看文件大小
# ls -lh
total 4.0K
-rw-r--r-- 1 root root 3.1K May 18 2017 test.bed
查看test.bed内容
# cat test.bed
4 生信常见数据格式
fasta 基于文本的,表示核酸/多肽序列。
特征:2行,id行(>开头)和序列行(一个字母表示一个碱基/氨基酸)。
fastaq 存储生物序列以及质量评价。
特征:4行,id行(@开头,记录必要信息),序列行,附加信息行(+),碱基质量行(PHRED值,用一个字符来表示碱基质量好坏)。
gff 记录序列转录起始位点、基因、外显子、内含子等元件在染色体中的位置信息。9列的文件。
gtf 可以用cufflinks里的gffread相互转换格式。
5 三驾马车之grep sed awk
grep 文本搜索:
grep [options] pattern file
-w 只匹配单词
-v 输出没有匹配的行
-n 显示行号
-r 从目录里查找
-e 匹配多个 grep -e 'gene' -e 'UTR'
-f 从文件内容中匹配 grep -f file
grep "查询的文字" "目标文件"
# grep H3K4me1 test.bed
结果会橙色标出
想知道在第几行,加一个-n
# grep -n H3K4me1 test.bed
4:chr1 9788 10497
在第四行。
把每一行的数字标注添加到一个新的文件new中
# cat -n test.bed > new
查看目录发现新的文件new
# ls
new test.bed
查看新文件new,仅使用-s参数,整理文件,但是结果也可以看到每一行的数字标注。
# cat -s new
1 track name="His (@ Brs) 50" url="http://chip-atlas.org/view?id=$$" gffTags="on"
2 chr1 9769 10673 ID=SRX539644;Name=H3K27ac%20(@%20HMEC);Title=GSM1383853:%20HMEC%20H3K27ac%20ChIP-
直接在test.bed搜索H3K4me1
# cat -n test.bed |grep H3K4me1
正则表达式:
补充 -E 表示正则表达式
^ 行首 cat file.txt | grep '^T'
$ 行尾
. 换行符之外的任意单个字符 cat file.txt | grep 'f.ee' 匹配到free
? 匹配?前项0次或1次 cat file.txt | grep 'f\?ee' 匹配ee或者fee
+ 匹配1次或多次 cat file.txt | grep 're\+' 匹配re或ree
* 匹配0次或多次 grep 'f*ee' 匹配fee或ee
{n} 匹配n次 grep 'fe\{2\}l' 匹配到feel
{n,} 匹配至少n次
{m,n} 匹配至少m,最多n次
[] 匹配任意一个
[^]排除字符 相当于反选
| 或
演示例子:
打开染色体文件,选择第三列,去除最开头“#” 符号,查找gene,查看前十行
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | grep 'gene'| head
pseudogene
ncRNA_gene
gene
只查看gene
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | grep '^gene'| head
查看有多少个gene
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | grep '^gene'| sort | uniq -c
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -v '#'| cut -f 3 | grep -w -c 'gene'
45 gene
查看最开头注释文件
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep '#' | head
不显示最开头的#
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -v '#'| head
查看Y染色体有哪些东西:
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -v '#'| cut -f 3 | sort | uniq -c
1549 CDS
290 biological_region
1 chromosome
4395 exon
216 five_prime_UTR
按照数字大小:
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -v '#'| cut -f 3 | sort | uniq -c | sort -n
1 chromosome
3 snoRNA
7 ncRNA
17 snRNA
45 gene
94 ncRNA_gene
146 mRNA
190 three_prime_UTR
216 five_prime_UTR
283 lnc_RNA
290 biological_region
386 pseudogenic_transcript
387 pseudogene
1549 CDS
4395 exon
反选exon输出,过滤掉含有exon的行:
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -v '#' | grep -v 'exon' | less -SN
只输出含有CDS、UTR行:
因为UTR包含3'和5',所以直接搜索,不加-w
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -e 'CDS' -e 'UTR' | less -SN
或者:
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep -E 'CDS' 'UTR' | less -SN
又或者:|管道符改为正则表达式,表示或:
$ cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | grep 'CDS\|UTR' | less -SN
查看fastaq文件@开头行数并统计:
$ cat hcc1395_normal_rep1_r1.fastq | grep '@' | wc -l
331958
或者:
$ cat hcc1395_normal_rep1_r1.fastq | grep -c '@'
sed 流编辑器:
对文本进行增删改查
sed [-options] 'script' file(s)
参数
-n:只显示sed处理的行
-e:直接在命令模式上进行sed编辑
-i:修改读取文件内容,不输出
常见script
2 第2行
2,4 第2行到第4行
2,$ 第2行到最后一行
2~3 第2行开始,每隔3行取一行
2,+4 第2行到2+4行
/pattern/ 匹配上pattern的行
[!] 表示否定,取反
a:指定行后增加一行,内容为a后面的字串
i:指定行前增加一行,内容为i后面的字串
d:删除某一行或某几行
c:改变指定行内容
s:替换 's/pattern/nem/[flags]'把pattern替换成new,可以指定flags
y:转换,字符一对一转换 'y/inchars/outchars/'
p:把匹配、修改的行打印出来,与-n参数合用
一些例子:
$ cat readme.txt
Welcome to Biotrainee()
This is your personal account in our Cloud
Have a fun with it
Please feel free to contact with me
在第1行后面增加1行:
$ cat readme.txt | sed ' 1a Welcome to Biotrainee()'
Welcome to Biotrainee()
Welcome to Biotrainee()
This is your personal account in our Cloud
Have a fun with it
Please feel free to contact with me
用sed匹配到一个空行:
$ cat test.txt
1
2
3
4
(这里是空行)
$ cat test.txt | sed '/^$/d' 删除开头^ 结尾$ 是空的 的行
1
2
3
4
把所有is替换为IS,g是全部替换,s换成1~3s就是替换1到3行
$ cat readme.txt | sed 's/is/IS/g'
Welcome to Biotrainee()
ThIS IS your personal account in our Cloud
Have a fun with it
Please feel free to contact with me
匹配有www的行,把ee替换为EE
$ cat readme.txt | sed '/www/ s/ee/EE/'
awk行处理:
对文本、数据进行行处理
awk [options] '{script}' file
常见参数:
-F 设置字段分隔符
-v 定义awk程序中的一个变量及其默认值
基础结构:'{script}'
匹配结构:'/pattern/{script}'
扩展结构:'BEGIN{script}{script}END{script}'
awk读取文本时,会划分每个数据字段,并分配给一个变量。
$0整个文本行
$1文本行第1个数据字段
$NF文本行最后一个数据字段
awk内置变量,通过-v自定义:
FS:定义输入字段分隔符
OFS:定义输出字段分隔符
RS:定义输入记录分隔符
ORS:定义输出记录分隔符
NF:数据文件列数
NR:数据行数
一些例子:
cat Homo_sapiens.GRCh38.107.chromosome.Y.gff3 | awk '{print$9}' | less -S
ID=gene:ENSG00000288686;Name=XGY2;biotype=transcribed_unprocessed_pseudogene;description=XG
ID=transcript:ENST00000680285;Parent=gene:ENSG00000288686;Name=XGY2-204;biotype=processed_transcript;tag=basic;transcript_id=ENST00000680285;version>
Parent=transcript:ENST00000680285;Name=ENSE00003911762;constitutive=0;ensembl_end_phase=-1;ensembl_phase=-1;exon_id=ENSE00003911762;rank=1;version=1
Parent=transcript:ENST00000680285;Name=ENSE00003911362;constitutive=1;ensembl_end_phase=-1;ensembl_phase=-1;exon_id=ENSE00003911362;rank=2;version=1
选取第一列
cut -f 1-3 test.bed |awk '{print $1}'
# cut -f 1-3 test.bed |awk '{print $1 }'
track
chr1
chr1
chr1
chr1
chr1
chr1
chr1
chr1
chr1
修改格式
# cut -f 1-3 test.bed |awk '{print $1":"$2","$3 }'
track:name="His,(@
chr1:9769,10673
chr1:9776,10481
chr1:9788,10497
chr1:9795,10434
chr1:9799,10446
chr1:9805,10419
chr1:9810,10438
chr1:9811,10465
chr1:9825,10306
倒序
# sort -k2,2nr test.bed |cut -f 1-3
chr1 9825 10306
chr1 9811 10465
chr1 9810 10438
chr1 9805 10419
chr1 9799 10446
chr1 9795 10434
chr1 9788 10497
chr1 9776 10481
chr1 9769 10673
track name="His (@ Brs) 50" url="http://chip-atlas.org/view?id=$$" gffTags="on"
2(第二列排序)n(数字)r(反过来)
4 软件安装-普通安装
安装软件:bowtie2
先下载Bowtie Files文件:https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.4.5/
查看目录,发现上传的zip文件
# ls
biosoft bowtie2-2.4.5-linux-x86_64.zip
移动到bowtie2目录内
# cd bowtie2/
# ls
bowtie2-2.4.5-linux-x86_64.zip
解压压缩包
# unzip bowtie2-2.4.5-linux-x86_64.zip
可以看到添加了许多新的命令(绿色显示):
调用程序bowtie2
# /home/kaoku/biosoft/bowtie2/bowtie2-2.4.5-linux-x86_64/bowtie2
看到弹出帮助文档即调用成功
No index, query, or output file specified!
Bowtie 2 version 2.4.5 by Ben Langmead (langmea@cs.jhu.edu, www.cs.jhu.edu/~langmea)
Usage:
bowtie2 [options]* -x <bt2-idx> {-1 <m1> -2 <m2> | -U <r> | --interleaved <i> | -b <bam>} [-S <sam>]
<bt2-idx> Index filename prefix (minus trailing .X.bt2).
NOTE: Bowtie 1 and Bowtie 2 indexes are not compatible.
<m1> Files with #1 mates, paired with files in <m2>.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
以下略
安装软件:samtools
先在biosoft目录下新建samtools目录,并进入该目录
cd ~/biosoft
mkdir samtools && cd samtools
获取软件在Github上面的下载URL
# wget https://github.com/samtools/samtools/releases/download/1.15.1/samtools-1.15.1.tar.bz2
--2022-07-14 15:35:14-- https://github.com/samtools/samtools/releases/download/1.15.1/samtools-1.15.1.tar.bz2
以下略
查看.bz2压缩包
# ls
samtools-1.15.1.tar.bz2
解压命令 tar xvfj
# tar xvfj samtools-1.15.1.tar.bz2
x(解压)v(显示)fj
解压后我们需要make一下文件,但在这之前要按照make和gcc以防报错
make安装:apt-get install make (也可以根据系统提示代码安装)
gcc安装:
sudo apt update
sudo apt install build-essential
安装完成后我们开始make刚刚安装的目录
# make
重要补充
安装samtools过程相当曲折,但是结果是好的,我来梳理一下注意点:
1 安装make,gcc
sudo apt update
sudo apt install make##安装make
sudo apt install build-essential##安装gcc
2 samtools安装过程中依赖于lzma、htslib两个包:
lzma:
apt-get install lzma
htslib:
第一步:
sudo apt-get update
sudo apt-get install gcc
sudo apt-get install make
sudo apt-get install libbz2-dev
sudo apt-get install zlib1g-dev
sudo apt-get install libncurses5-dev
sudo apt-get install libncursesw5-dev
sudo apt-get install liblzma-dev
第二步:
cd /usr/bin
wget https://github.com/samtools/htslib/releases/download/1.9/htslib-1.9.tar.bz2
tar -vxjf htslib-1.9.tar.bz2
cd htslib-1.9
make
3 更新curl.h
sudo apt-get install libcurl4-openssl-dev
4 回到samtools文件,make
顺利运行后,看到如下绿色的samtools说明安装成功
至于conda的安装和配置放在下一篇。
我们下一篇再见!