Linux-0 生信入门环境: 讲解安装生信入门的必要软件(Git、x-manager、typora\notepad++、R-studio)及一些R-studio的基本使用。
Linux-1 学习资源介绍:讲解入门Linux的一些开始步骤和经验。
linux-2 系统认知:讲解Linux系统的一些特点(交互式、多用户)和基本命令(grep、管道、history、su切换用户、登录 : ssh 用户名@ip地址 )
Linux-3 去可视化的命令行:
top:实时动态地查看系统的整体运行情况。
sleep 10 :睡眠10秒、
&:任务在后台运行
ps -ef : 标准格式显示进程
ifconfig : 显示或配置网络设备
ls 、cd - :回到上一个目录、tab补全、pwd、*通配符、mkdir、touch、echo:内容打印到屏幕、rm、mv、cp、cat、head、>重定向、Ctrl +c 终止命令
批量、高效、多用户 (Linux特点)
相对路径和绝对路径
df -dh : 磁盘整体使用量Linux-4 文本处理:
wget:从指定的URL下载文件
wc : word count, 文件的Byte数、字数或是列数
head、tail、more(q退出)、cat、less(-s:单行过长超出部分不显示 - N :显示每行行号)
grep :查找符合模式的行 -n :列出行号
cut :选择每行指定位置输出 sort : 排序
awk : https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.htmlLinux-5 软件安装:
1、tr:将一组字符变成另一组字符。
2、安装软件步骤:
mkdir 软件名
cd 软件名
wget 安装包下载地址
解压安装包(unzip/tar....)
cd 解压后的目录
makeLinux-7 环境变量:
1、方便调用命令(bowtie2)的使用方法:
第一种方法:首先赋值: bowtie2=bowtie2命令所在路径 使用时: $bowtie2
第二种方法: 使用 alias bowtie2=bowtie2命令所在路径 使用时:bowtie2
第三种方法: 修改环境变量 echo $PATH,
export PATH=bowtie2命令所在路径/bin:$PATH' >>~/.bashrc
source ~/.bashrc
2、bowtie2的使用:
建立索引:bowtie2-build .fa文件 索引的前缀
比对:
bowtie2 -x 索引文件前缀 -1 短序列文件(.fq文件) -2 短序列文件(.fq文件) -S 输出的.sam文件
bowtie2 -x 索引文件前缀 -U 长序列文件(.fq文件) -S 输出的.sam文件Linux-8 shell脚本编程:
1、变量:讲解环境变量
2、参数:$0 :Shell本身的文件名 $1-$n : 添加到Shell的各参数值
拓展:https://www.cnblogs.com/fhefh/archive/2011/04/15/2017613.html
#创建一个小脚本,内容为echo $0,并运行。
vip41@VM-0-15-ubuntu:~/tmp$ vi tmp.sh
vip41@VM-0-15-ubuntu:~/tmp$ cat tmp.sh
echo $0
vip41@VM-0-15-ubuntu:~/tmp$ bash tmp.sh
tmp.sh
#往脚本添加$1 $2 $3,并运行脚本(后面再添加三个任意参数如12 23 34)
vip41@VM-0-15-ubuntu:~/tmp$ vi tmp.sh
vip41@VM-0-15-ubuntu:~/tmp$ cat tmp.sh
echo $0 $1 $2 $3
vip41@VM-0-15-ubuntu:~/tmp$ bash tmp.sh 12 23 34
tmp.sh 12 23 34
#12 23 34 参数传入$1 $2 $3,并被echo出来。
3、通配符 : *
:匹配任意长度任意字符 [ ]
:匹配一个单字符范围,如[a-z],[0-9]
拓展:https://abcfy2.gitbooks.io/linux_basic/content/first_sense_for_linux/command_learning/wildcard.html
vip41@VM-0-15-ubuntu:~/tmp$ ls
2.3 a.1 a.txt b.txt s.1 tmp.sh
vip41@VM-0-15-ubuntu:~/tmp$ echo *.txt
a.txt b.txt
vip41@VM-0-15-ubuntu:~/tmp$ echo *.1
a.1 s.1
vip41@VM-0-15-ubuntu:~/tmp$ echo [a-z].1
a.1 s.1
4、标准头文件(有待进一步理解):
#!/bin/bash
set -e
# Function for script description and usage
usage()
{
cat <
usage:
。。。。
}
5、循环:for(``:捕获待了解)、while
#for循环
vip41@VM-0-15-ubuntu:~/tmp$ ls
2.3 a.txt s.1 tmp.sh z1.txt z3.txt z5.txt z7.txt z9.txt
a.1 b.txt s{i}.txt z10.txt z2.txt z4.txt z6.txt z8.txt
vip41@VM-0-15-ubuntu:~/tmp$ for i in {3..9};do echo z${i}.txt;done
z3.txt
z4.txt
z5.txt
z6.txt
z7.txt
z8.txt
z9.txt
#捕获
vip41@VM-0-15-ubuntu:~/tmp$ for i in `ls *.txt`;do echo $i;done
s{i}.txt
z10.txt
z1.txt
z2.txt
z3.txt
z4.txt
z5.txt
z6.txt
z7.txt
z8.txt
z9.txt
a.txt:
b.txt:
6、建立软链接:
vip41@VM-0-15-ubuntu:~/tmp1$ ls ~/tmp/*.txt | while read id;do echo $id;done
/home/vip41/tmp/s{i}.txt
/home/vip41/tmp/z10.txt
/home/vip41/tmp/z1.txt
/home/vip41/tmp/z2.txt
/home/vip41/tmp/z3.txt
/home/vip41/tmp/z4.txt
/home/vip41/tmp/z5.txt
/home/vip41/tmp/z6.txt
/home/vip41/tmp/z7.txt
/home/vip41/tmp/z8.txt
/home/vip41/tmp/z9.txt
vip41@VM-0-15-ubuntu:~/tmp1$ ls ~/tmp/*.txt | while read id;do echo $(basename $id);done
s{i}.txt
z10.txt
z1.txt
z2.txt
z3.txt
z4.txt
z5.txt
z6.txt
z7.txt
z8.txt
z9.txt
vip41@VM-0-15-ubuntu:~/tmp1$ ls ~/tmp/*.txt | while read id;do ln -s $id $(basename $id);done
vip41@VM-0-15-ubuntu:~/tmp1$ ls -lh
total 0
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 a.txt: -> /home/vip41/tmp/a.txt:
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 b.txt: -> /home/vip41/tmp/b.txt:
lrwxrwxrwx 1 vip41 vip41 24 Dec 18 22:18 s{i}.txt -> /home/vip41/tmp/s{i}.txt
lrwxrwxrwx 1 vip41 vip41 23 Dec 18 22:18 z10.txt -> /home/vip41/tmp/z10.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z1.txt -> /home/vip41/tmp/z1.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z2.txt -> /home/vip41/tmp/z2.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z3.txt -> /home/vip41/tmp/z3.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z4.txt -> /home/vip41/tmp/z4.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z5.txt -> /home/vip41/tmp/z5.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z6.txt -> /home/vip41/tmp/z6.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z7.txt -> /home/vip41/tmp/z7.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z8.txt -> /home/vip41/tmp/z8.txt
lrwxrwxrwx 1 vip41 vip41 22 Dec 18 22:18 z9.txt -> /home/vip41/tmp/z9.txt
附:shell十三问:http://wiki.jikexueyuan.com/project/13-questions-of-shell/what-shell.html
7、文件 文件描述符
输入文件—标准输入(默认输入来自键盘) 0
输出文件—标准输出(默认输出到屏幕) 1
错误输出文件—标准错误(默认输出到屏幕) 2
vip41@VM-0-15-ubuntu:~/tmp1$ vi tmp.sh
vip41@VM-0-15-ubuntu:~/tmp1$ cat tmp.sh
cd ghkyu
vip41@VM-0-15-ubuntu:~/tmp1$ bash tmp.sh
tmp.sh: line 1: cd: ghkyu: No such file or directory
vip41@VM-0-15-ubuntu:~/tmp1$ bash tmp.sh 2>result.txt
vip41@VM-0-15-ubuntu:~/tmp1$ cat result.txt
tmp.sh: line 1: cd: ghkyu: No such file or directory
8、命令替换:
1 ).``
(反引号,电脑键盘Esc下面的那个键)
2 ).$()
命令
vip41@VM-0-15-ubuntu:~/tmp1$ vi tmp.sh
vip41@VM-0-15-ubuntu:~/tmp1$ cat tmp.sh
export bed=afaf
echo $bed
echo `date`
echo $(date)
vip41@VM-0-15-ubuntu:~/tmp1$ bash tmp.sh
afaf
Tue Dec 18 23:18:27 CST 2018
Tue Dec 18 23:18:27 CST 2018
9.进程替换:http://wiki.jikexueyuan.com/project/13-questions-of-shell/what-shell.html
- Linux-9 脚本要学好:
1、整体思路:
配置文件出现问题(左端测序文件和右端测序文件不匹配)-->查看已比对好的.bam文件(正常大小以G为单位),发现出现几k的文件-->由于两个样本的FQ双端文件匹配错误,导致.bam文件生成失败(几k的.bam文件)-->将错误的fq配置文件正常排序,重新配置文件(24个),再重新进行比对。
2、命令解析:
1)grep 'NT-2' config.mapping | cut -f 1 | cut -d "-" -f 1 | sort | uniq -c | grep -w 1 | awk '{print $2}' > onceid
: 从config.mapping提取含NT-2的文件,在对其切割(cut),指定第一列显示(-f 1),再对第一列以-
切割(-d"-")显示第一列,再排序(sort),去除重复出现的行(uniq)在行前显示重复次数(-c)匹配只有重复出现一次的文件(grep -w 1)并输出( awk '{print $2}' ),导入到onceid文件中。(出现过一次的文件需要剔除,因为一个比对需要两个fq文件)
2、grep -v -f onceid wrong.sampleid | wc
: 从wrong.sampleid文件中查找onceid文件中的内容(-f onceid wrong.sampleid),再反选(-v)即不是onceid的内容,再统计个数,结果为24个需要重新比对的文件(实际比对12次)
3、
grep -v -f onceid wrong.sampleid > tmp
mv tmp wrong.samlieid
: 将需要比对的文件导入到tmp并重命名为wrong.samlieid。
4、sort -t "_" -k 1,1 fq2
: 以下划线分割,第一个下划线前为第一列,下划线后的内容为下一列。指定排序为分割后的第一列,1,1
:指定起始列和终止列都为第一列(第一列和第二列长度可能不同,所以需要指定起始列和终止列)。
Linux-10 文本处理:
grep
-f : 指定范本文件file,每一行是一个查找模式。空的file文件未指定查找模式。
-w : 只有完全符合该字的行才会被输出
-c : 统计与wc命令一样
-v : 匹配但是不打印出来
tr : 转换文件中的字符
例:tr '\t' '\n' 把制表符换成换行符
cut -f : 输出指定位置处的字节
如: cut -f 1, 31-32 , 40 info :
默认以制表符为分隔,分割并打印出info文件的 第一列 第31列到32列 第40列
-d ‘;’ :指定分隔符(;)
sed 's///g' : 替换分隔符
如:sed 's/;/\t/g' : 将分隔符的分号换成\t
paste -s -d + | bc
-s 将每个文件合并成行而不是按行粘贴
-d 指定不同于空格或tab键的域分隔符。
| bc : 在前面指定表达式就会帮助你算出来
awk'{print $1}" tmp : 打印出第一列
linux-12 数据格 : http://www.jianshu.com/p/b000a2f0679f
友情阅读推荐:
- 强烈推荐参加生信技能树(爆款入门培训课)全国巡讲 ,课程详情见:https://mp.weixin.qq.com/s/Z9sdxgvFj0XJjYaW_5yHXg 各大城市均有开课,随时随地报名。
- 生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!
B站链接:https://m.bilibili.com/space/338686099 - 学徒培养详见:https://mp.weixin.qq.com/s/3jw3_PgZXYd7FomxEMxFmw