Linux系统是进行生物信息学分析的基石,许多生物信息学软件都是基于Linux系统开发的。所以学习Linux对于生物信息学分析尤为重要。
学习链接:https://research.biomart.cn/experiment/course_detail.htm?id=25&from=wechat_20190713
承接上一篇,接下来的就是Linux的三驾马车:grep、awk、sed
grep是一个强大的文本搜索工具,可以再文件中查找符合条件的行,并且把匹配的行打印出来
grep的常用参数:
#grep+'文字'+文件
grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash #把含有root的行匹配出来并且打印
# -c 含有目标文字的行数,直接打印出来行数
grep -c bin /etc/passwd
31
# -n 打印出匹配目标的行,并且打印出目标的行号
grep -n bin /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3:bin:x:2:2:bin:/bin:/usr/sbin/nologin
4:sys:x:3:3:sys:/dev:/usr/sbin/nologin
5:sync:x:4:65534:sync:/bin:/bin/sync
6:games:x:5:60:games:/usr/games:/usr/sbin/nologin
7:man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
8:lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
9:mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
10:news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
11:uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
12:proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
13:www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
14:backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
15:list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
16:irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
17:gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
18:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
19:systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
20:systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
21:systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
22:systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
23:syslog:x:104:108::/home/syslog:/bin/false
24:_apt:x:105:65534::/nonexistent:/bin/false
25:lxd:x:106:65534::/var/lib/lxd/:/bin/false
26:messagebus:x:107:111::/var/run/dbus:/bin/false
27:uuidd:x:108:112::/run/uuidd:/bin/false
28:dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
29:sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
30:ubuntu:x:500:500:ubuntu,,,:/home/ubuntu:/bin/bash
31:ntp:x:111:117::/home/ntp:/bin/false
# -o 输出匹配到的所有的字符
grep -o root /etc/passwd
root
root
root
更多的grep参数的使用方法,可以 man grep 进行查找
awk:是一个强大的文本分析工具,对特定的行中的特定列进行操作;简单来说awk就是把文件逐行读入,以分隔符进行切割,然后对选定的列进行输出
awk默认的分隔符:空格或者tab -F 指定分隔符
$0代表所有区域,$1代表第一区域,$2代表第二区域......
awk有书写规范
awk ‘{action }’ file
awk ‘ pattern {action}' fille
#接下来,我们使用拟南芥数据进行学习
#对拟南芥注释文件的第四列进行提取,|查看前 10行
awk '{print $4}' Arabidopsis_thaliana.TAIR10.44.gff3|head
30427671
19698289
23459830
18585056
26975502
366924
154478
Information
#筛选出第三列是gene所有的行,并且输出筛选的第四列|查看前10行
awk '$3=="gene"{print $4}' Arabidopsis_thaliana.TAIR10.44.gff3 |head
3631
6788
11649
23121
31170
33365
38444
44970
47234
49909
#将拟南芥注释文件的第5列和第4列进行做差|查看后10行
awk '{print $5-$4}' Arabidopsis_thaliana.TAIR10.44.gff3 |tail
281
281
0
1506
1506
389
389
434
434
0
更多的awk参数的使用方法,可以 man awk 进行查找
sed是一种强大的文件编辑器,它一起处理一行内容。
sed有书写规范: sed 's/a/b/g' file
sed的参数使用
-e :直接在命令模式上运行sed的动作编辑
-n :只有经过sed处理过的行,才会被打印出来
-r :支持正则表达式
-i :直接修改读取的文件内容,而不输出只终端
在’ ‘中还有命令参数
s:取代,最常用也是最重要的一个命令参数
d:删除,d后通常不接任何东西
p:打印 通常p会与参数 -n 一起使用
#以拟南芥gff3文件作为例子
tail -4 Arabidopsis_thaliana.TAIR10.44.gff3
Pt araport11 CDS 152806 153195 . + 0 ID=CDS:ATCG01310.1;Parent=transcript:ATCG01310.1;protein_id=ATCG01310.1
Pt araport11 exon 153878 154312 . + . Parent=transcript:ATCG01310.1;Name=ATCG01310.1.exon2;constitutive=1;ensembl_end_phase=0;ensembl_phase=0;exon_id=ATCG01310.1.exon2;rank=2
Pt araport11 CDS 153878 154312 . + 0 ID=CDS:ATCG01310.1;Parent=transcript:ATCG01310.1;protein_id=ATCG01310.1
#将Pt全部进行替换
tail -4 Arabidopsis_thaliana.TAIR10.44.gff3 |sed 's/Pt/Bioinform/'|less
Bioinform araport11 CDS 152806 153195 . + 0 ID=CDS:ATCG01310.1;Parent=transcript:ATCG01310.1;protein_id=ATCG01310.1
Bioinform araport11 exon 153878 154312 . + . Parent=transcript:ATCG01310.1;Name=ATCG01310.1.exon2;constitutive=1;ensembl_end_phase=0;ensembl_phase=0;exon_id=ATCG01310.1.exon2;rank=2
Bioinform araport11 CDS 153878 154312 . + 0 ID=CDS:ATCG01310.1;Parent=transcript:ATCG01310.1;protein_id=ATCG01310.1
#在示例文件前面增加文字
tail -4 Arabidopsis_thaliana.TAIR10.44.gff3 |sed 's/^/12345/g'|less
12345Pt araport11 CDS 152806 153195 . + 0 ID=CDS:ATCG01310.1;Parent=transcript:ATCG01310.1;protein_id=ATCG01310.1
12345Pt araport11 exon 153878 154312 . + . Parent=transcript:ATCG01310.1;Name=ATCG01310.1.exon2;constitutive=1;ensembl_end_phase=0;ensembl_phase=0;exon_id=ATCG01310.1.exon2;rank=2
12345Pt araport11 CDS 153878 154312 . + 0 ID=CDS:ATCG01310.1;Parent=transcript:ATCG01310.1;protein_id=ATCG01310.1
更多的sed参数的使用方法,可以 man sed进行查找
其他常用命令:重定向和管道
重定向:
> 将内容重定向到新的文件中
head Arabidopsis_thaliana.TAIR10.44.gff3 > tmp1.txt
less tmp1.txt
##gff-version 3
##sequence-region 1 1 30427671
##sequence-region 2 1 19698289
##sequence-region 3 1 23459830
##sequence-region 4 1 18585056
##sequence-region 5 1 26975502
##sequence-region Mt 1 366924
##sequence-region Pt 1 154478
#!genome-build The Arabidopsis Information Resource TAIR10
#!genome-version TAIR10
>>:将文件追加到末尾
head Arabidopsis_thaliana.TAIR10.44.gff3 >> tmp1.txt
less tmp1.txt
##gff-version 3
##sequence-region 1 1 30427671
##sequence-region 2 1 19698289
##sequence-region 3 1 23459830
##sequence-region 4 1 18585056
##sequence-region 5 1 26975502
##sequence-region Mt 1 366924
##sequence-region Pt 1 154478
#!genome-build The Arabidopsis Information Resource TAIR10
#!genome-version TAIR10
##gff-version 3
##sequence-region 1 1 30427671
##sequence-region 2 1 19698289
##sequence-region 3 1 23459830
##sequence-region 4 1 18585056
##sequence-region 5 1 26975502
##sequence-region Mt 1 366924
##sequence-region Pt 1 154478
#!genome-build The Arabidopsis Information Resource TAIR10
#!genome-version TAIR10
可以看见文件出现了两遍,第二遍就是追加到末尾的
管道: | 将前一部分的输出作为后一部分的输入
tail -4 Arabidopsis_thaliana.TAIR10.44.gff3 |sed 's/Pt/Bioinform/'|less
打包和压缩
压缩:
gzip filename
bzip2 filename
tar -zcvf filename
zip test.zip test.txt
解压缩:
gzip -d filename.gz
bzip2 -d filename.bz2
tar -zxvf filemame.tar.gz
unzip test.zip
软链接和硬链接
软硬连接可以理解为是电脑桌面的快捷方式
不过二者是有区别的:
软链接中,如果把源文件删除,那么软链接就失效了
硬链接中,如果源文件删除,则不受影响
#软链接
ln -s /home/ubuntu/reference/At_refe/Arabidopsis_thaliana.TAIR10.44.gff3 ./
lrwxrwxrwx 1 ubuntu ubuntu 66 Jul 16 16:45 Arabidopsis_thaliana.TAIR10.44.gff3 -> /home/ubuntu/reference/At_refe/Arabidopsis_thaliana.TAIR10.44.gff3
drwxrwxr-x 24 ubuntu ubuntu 4.0K Jul 16 12:41 miniconda3
-rw-rw-r-- 1 ubuntu ubuntu 68M Apr 19 23:47 Miniconda3-latest-Linux-x86_64.sh
-rw------- 1 ubuntu ubuntu 139K Jul 16 02:33 nohup.out
#硬链接
ln /home/ubuntu/reference/At_refe/Arabidopsis_thaliana.TAIR10.44.gtf.gz ./
-rw-rw-r-- 1 ubuntu ubuntu 0 Jul 15 10:00 aa.txt
lrwxrwxrwx 1 ubuntu ubuntu 66 Jul 16 16:45 Arabidopsis_thaliana.TAIR10.44.gff3 -> /home/ubuntu/reference/At_refe/Arabidopsis_thaliana.TAIR10.44.gff3
-rw-rw-r-- 2 ubuntu ubuntu 9.6M Jul 15 08:34 Arabidopsis_thaliana.TAIR10.44.gtf.gz
drwxrwxr-x 24 ubuntu ubuntu 4.0K Jul 16 12:41 miniconda3
-rw-rw-r-- 1 ubuntu ubuntu 68M Apr 19 23:47 Miniconda3-latest-Linux-x86_64.sh
-rw------- 1 ubuntu ubuntu 139K Jul 16 02:33 nohup.out
可以看出,软链接和硬链接的文件所占的文件大小也是不一样的。
快捷键和alias
快捷键的好处:节省字符输入
alias
type ll
ll is aliased to `ls -alF'
可以发现 ll 其实也是一个alias
通过设置环境变量,可以实现alias的永久保持
vim ~/.bashrc
alias lh ='ls -lh'
source ~/.bashrc
环境变量:设置环境变量在执行程序的时候,非常简便,不需要再填写程序的路径
配置环境变量的时候会有三种方法
方法1:
如同alias的设置那样,手动修改 ~/.bashrc
然后 source ~/.bashrc 进行永久修改
方法2:
赋值
lh='ls -lh'
$lh #就可以执行命令,效果虽然相同,但是很少见
方法3:
修改$PATH ;修改环境变量$PATH
echo $PATH
export PATH="$PATH:/home/ubuntu/miniconda3/bin"
source ~/.bashrc #最后进行永久修改