(先复习一下吧)
命令格式
快捷键
Ctrl + C:终止任务
Ctrl + Z:暂停任务(将一个正在前台执行的命令放到后台,并处于暂停状态)
Ctrl + L:清屏
Ctrl + A:回到行首
Ctrl + E:回到行尾
Ctrl + D:注销当前会话
进程管理
top #动态进程,q退出,查看所有用户的运行进程
ps #静态进程
jobs #查看后台命令,命令正在当前终端运行
fg %n #将后台的命令调至前台继续进行
bg %n #将后台暂停的命令变成后台运行
kill %n #终止后台进程
解压和压缩
*.zip :zip程序压缩的文件
*.gz :gzip程序压缩的文件 gzip -d file.gz或gunzip file.gz
*.bz2 :bzip2程序压缩的文件 bzip2 -d file.bz2
*.tar :tar程序打包的数据,没有压缩过
*.tar.gz :tar程序打包的文件,其中并且经过gzip的压缩 tar -zxvf file.tar.gz
*.tar.bz2 :tar程序打包的文件,其中并且经过bzip2的压缩 tar -jxvf file.tar.bz2
压缩:tar -jcvf filename.tar.bz2 要被压缩的文件
查询:tar -jtvf filename.tar.bz2
解压缩:tar -jxvf filename.tar.bz2 -C 要解压缩的目录
仅打包:tar -cvf file.tar filename...
vi编辑器
(1) 一般指令模式(command mode):以vi打开一个文件就直接进入一般指令模式了。可以使用上下左右按键来移动光标,可以使用删除字符或删除整行来处理文件内容,也可以使用复制、粘贴来处理文件数据。一般指令模式可与编辑模式及指令列模式切换,但编辑模式与指令列模式之间不可互相切换。
(2) 编辑模式(insert mode):在一般指令模式中无法编辑文件内容。按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式,在画面的左下方会出现INSERT或REPLACE的字样,此时才可以进行编辑。如果要回到一般指令模式时,需要按下[Esc]键退出编辑模式。
(3) 指令列命令模式(command-line mode):在一般模式当中,输入“: / ?”三个中的任何一个按钮,就可以将光标移动到最底下那一行。在这个模式中,可以执行搜索、保存、退出等动作。
Bash中的通配符和特殊符号
通配符:
*:代表0个到无穷多个任意字符
?:代表一定有一个任意字符
[]:代表一定有一个在括号内的字符(非任意字符)。例如[abcd]代表了一定有一个字符,可能是a,b,c,d这四个任何一个
[ - ]:若有减号在中括号内时,代表在编码顺序内的所有字符。例如[0-9]代表0到9之间的所有数字
[^ ]:反向选择,例如[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受的意思
特殊符号:
#:批注符号,在后面的数据均不执行
\:跳脱符号,将特殊字符或通配符还原成一般字符
|:管道
;:连续指令下达分隔符
~:用户的家目录
$:取用变量前导符
&:工作控制,将指令变成背景下工作
!:逻辑运算意义上的非
/:目录符号,路径分隔的符号
>、>>、<、<<:数据流重导向
‘’:单引号,不具有变量置换的功能($变为纯文本)
“”:双引号,具有变量置换的功能($可保留相关功能)
``:两个`中间为可以先执行的指令,亦可使用$()
():在中间为子shell的起始与结束
{}:在中间为命令区块的组合
正则表达式
正则表达式(Regular Expression,RE)是通过一些特殊字符的排列,用以搜寻/取代/删除一行或多行文字字符串, 简单的说,正则表达式就是用在字符串的处理上面的一项表示式。正则表达式并不是一个工具程序,而是一个字符串处理的标准依据,是一种字符串的表示方法。如果你想要以正则表达式的方式处理字符串,就得使用支持正则表达式的工具程序,这类工具程序很多,例如vi、sed、awk等等。但是例如cp、ls等指令并未支持正则表达式, 所以就只能使用bash自己本身的通配符。
注意:正则表达式的特殊字符与命令行中输入指令的通配符并不相同。例如,在通配符当中的*
代表的是0~无限多个字符的意思,但是在正则表达式当中,*
则是重复0到无穷多个的前一个RE字符的意思。
基础的正则表达式字符:^ $ . * [list] [n1-n2] [^list] \{n,m\}
延伸的正则表达式字符:\? \+ T\|t gd\|good g(la|oo)d A(xyz)+C
正则表达式特殊符号:
[:alnum:] 字母数字
[:alpha:] 字母
[:blank:] 空格制表符
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:punct:] 标点
[:space:] 所有空白符(换行符和回车)
cat chipfile | grep '[[:alpha:]]' #cat chipfile | grep [[:alpha:]]
cat chipfile | grep ^[[:digit:]]
cat chipfile | grep '[DP]' #cat chipfile | grep [DP]
cat chipfile | grep '5\+' #需要加引号,匹配到5 “>=1次”
cat chipfile | grep '5\{2\}' #匹配到5 “2次”,实际上5555也会匹配到
cat chipfile | grep -w '5\{2\}' #精确匹配,不会匹配到5555
cat chipfile | grep '5\?' #能匹配到没有5、有5的所有行,包括5555
cat chipfile | grep '98\?7' #能匹配到97、987
cat chipfile | grep 'ChIP\|DNA' #cat chipfile | grep -E 'IP|DNA'
less
less -NS chipfile
zless file.gz
wc
wc [-lwm]
-l :行数
-w :字符串数 (英文单字)
-m :字符数
cut
cut -d '分隔字符' -f fields
cut -c 字符区间
-d :后面接分隔字符。默认是 \t
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段(fields)
-c :以字符 (characters) 的单位取出固定字符区间
-b 表示字节;-c 表示字符;-f 表示定义字段。
N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段。例如cut -f 1,3-5。
sort
sort [-fbMnrtuk] [file or stdin]
-n :使用纯数字进行从小到大排序 (默认是以文字型态来排序的)
-r :反向排序
-t :分隔符,默认是用 [tab] 键来分隔
-k :以那个区间 (field) 来进行排序的意思
-V :字符串中含数值时,按数值从小到大排序
-f :忽略大小写的差异,例如 A 与 a 视为编码相同
-b :忽略最前面的空格符部分
-u :就是 uniq ,相同的数据中,仅出现一行代表
每次使用 -k选项都要带上指定列的范围(start, end),例如-k2,2n;sort -k1,1 -k2,2nr test.bed
uniq
uniq [-ic]
-c :进行计数
-i :忽略大小写字符的不同
tr
-d :删除指定字符
-s :缩减连续重复字符
cat chipfile | tr 'C' 'c'
cat chipfile | tr 'CI' 'ci'
cat chipfile | tr -d ChIP # Chromatin变成了romatin
grep
grep [-acinv] [-A] [-B] [--color=auto] '搜寻字符串' filename
-n :输出行号
-v :反向选择,即显示出没有 '搜寻字符串' 内容的那一行
-c :计算找到 '搜寻字符串' 的次数
-w :精确查找某个关键词(word)
-e :指定多个匹配模式
-f :从指定文件中读取要匹配的模式
-i :忽略大小写
-o :只抽离输出匹配的部分
--color=auto :将找到的关键词部分加上颜色显示
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来。-A2
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来。-B1
-C :指定输出包括匹配到的前后多少行
-E :指定支持扩展表达式,或者用 egrep命令
grep 'ChIP' chipfile #cat chipfile | grep ChIP
grep -n 'ChIP' chipfile
grep -w 'ChIP' chipfile #精确查找单词,'ChIP-seq'不算'ChIP'
grep -c 'ChIP' chipfile #找到'ChIP'的行数,不是次数
grep -i 'chip' chipfile
sed
在指定行后增加一行 sed '1,2a 555'
在指定行前增加一行 sed '1,2i 555'
删除某几行 sed '2,5d'
删除匹配行 sed '/Welcome/d'
改变指定行的内容 sed '2c 000'
替换匹配到的内容 sed 's/is/IS/g'
替换指定行匹配到的内容sed '4s/ee/EE/g'
字符一对一转换 sed 'y/abcd/ABCD/'
打印出指定行 sed -n '2~4p'
cat chipfile | sed '1,2a 555'|cat -n
cat chipfile | sed '1,2i 555' | cat –n
cat chipfile | sed '2,5d' | cat -n
cat chipfile | sed '/IP/d ' | cat -n
cat chipfile | sed '2c 000 ' | cat -n
cat chipfile | sed 's/DNA/dna/g' | cat -n
cat chipfile | sed 'y/DNA/dna/' | cat –n
cat chipfile | sed -n '16,20p'
cat chipfile | sed -n '/\./p'
cat chipfile | sed -n '/^5/p'
cat chipfile | sed -n '/5\+/p'
cat chipfile | sed -n '/5\{3\}/p'
awk
awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
特点:
(1) 相较于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个字段来处理,默认的字段分隔符为空格键或[tab]键。
(2) 在awk的括号内,每一行的每个字段都是有变量名称的,那就是$1, $2, ...
,而$0
则代表一整行。
(3) awk后续的所有动作是以单引号括住的,所以awk的格式内容如果想要以print打印时,非变量的文字部分都需要使用双引号来定义。
(4) awk在{}内的动作,如果有需要多个指令辅助时,可利用分号 ; 间隔,或者直接以[Enter]按键来隔开每个指令。
(5) 在awk当中,变量可以直接使用,不需加上$符号。
处理流程:
$ awk 'BEGIN{动作} pattern{动作} END{动作}'
(0) 在所有处理操作之前,先读取BEGIN关键字标识起来的代码段。
(1) 读入第一行,并将第一行的资料填入$0, $1, $2....
等变量当中。
(2) 依据"条件类型"的限制,判断是否需要进行后面的"动作"。
(3) 做完所有的动作与条件类型。
(4) 若还有后续的行,则重复上面1-3的步骤,直到所有的数据都读完为止。
(5) 最后执行END代码段,在END块中完成最终结果的输出。
变量:
awk '{print $9,$10}' #分隔符默认空格和制表符
awk '{print $9 “\t” $10}' #以\t为分隔符输出
awk '{print $9 $10}' #没有分隔符
awk -F '\t' '{print $9}'
awk '/UTR/{print $9,$10}'
awk 'BEGIN{print "find UTR"} /UTR/{print $9,$10}'
cat chipfile | sed -n '16,20p' | awk '{print $1,$3}' #输出的分隔符为空格
cat chipfile | sed -n '16,20p' | awk '{print $1"\t"$3}' #以制表符为分隔符输出
cat chipfile | sed -n '16,20p' | awk '{print $1 $3}' #没有分隔符
cat chipfile | awk -F '.' '{print $1}' #cat chipfile | awk -F . '{print $1}'
cat chipfile | awk '/\./{print $0}' #输出匹配有.的行,如果不加\将视为正则表达式
cat chipfile | awk '/^5/{print $0}'
cat chipfile | awk '/5+/{print $0}'
cat chipfile | awk '/5{3}/{print $0}'
内建变量:
cat chipfile | awk '{print NR}' #第n行
cat chipfile | awk '{print NF}' #这一行有n列,即n个字段
运算字符:
算术运算:+, -, *, /, % (取余), ** (平方), int(x) (x的整数部分), log(x) (x的自然对数)
逻辑运算:==, !=, <, >, <=, >=
与或非:&&, ||, !
模式匹配:a~b, a!~b
条件和循环语句:
内置函数:
tolower():字符转为小写
toupper() :字符转为大写
length():返回字符串长度
substr(s,i,j):返回s的i-j部分
split(s,x,d):根据分隔符d分隔数据,赋值给x
sub(f,r,s):根据正则f从r中提取数据到s
sin():正弦
cos():余弦
sqrt():平方根
rand():随机数
举个栗子:
less -S Data/example.gtf | awk 'BEGIN{FS="\t";OFS="\t"} {gsub("gene","Gene",$3);print $0}' | less -S
awk '$2 > 9800' #输出符合条件的行
awk '$3 - $2 > 1000'
awk '$1 ~ /chr1/ && $3 - $2 > 1000' #~表示符合正则表达式
awk '$1!~/^#/' #去掉注释行
awk 'NR >= 3 && NR <= 5' #取出第3-5行
awk '{if($3=="gene") print $0}'
awk '{if($3=="gene") {print $0} else {print $3 " is not gene"}}'
awk '{for(i=1;i<4;i++) {print $i}}'
awk '/exon/{print $5-$4}'
cat chipfile | sed -n '16,20p' | awk '{print $1,$3}'
cat chipfile | sed -n '16,20p' | awk '{print $3-$2}'
cat chipfile | sed -n '16,20p' | awk '$1 > 500' #cat chipfile | sed -n '16,20p' | awk '$1 > 500 {print $0}'
cat chipfile | sed -n '16,20p' | awk '{if($1 > 500) {print $0}}' #cat chipfile | sed -n '16,20p' | awk '{if($1 > 500) {print $0} else {print $1 " is not larger than 500"}}'
cat chipfile | sed -n '16,20p' | awk '$3 - $2 > 0'
cat chipfile | sed -n '16,20p' | awk '$1 > 500 && $3 - $2 > 0' #两者都要成立
cat chipfile | sed -n '16,20p' | awk '$1 ~ /5/'
cat chipfile | sed -n '16,20p' | awk '$1 !~ /^5/'
举例用到的chipfile文件的内容如下 ↓(我瞎写的)
ChIP,即染色质免疫共沉淀技术(Chromatin immunoprecipitation, ChIP)。
它是在生理状态下,利用甲醛将细胞内的DNA与蛋白质交联(Crosslink),从而形成复合物,然后经细胞裂解、细胞核收集和裂解、分离染色体、通过超声或酶处理将染色质随机切割,再通过抗原抗体的特异性识别反应沉淀此复合体,从而特异性地富集目的蛋白结合的DNA片段,通过对目的片断的纯化与检测,从而获得与该蛋白结合的DNA的信息。
1. 使用甲醛将染色体上的所有蛋白质与DNA交联
2. 将DNA切割成小片段
3. 使用抗体分离出感兴趣的蛋白,及其结合的DNA片段
4. 洗去其它蛋白和DNA片段
5. 解除交联,洗去蛋白,保留DNA片段
ChIP-seq是将染色质免疫共沉淀与二代高通量测序相结合的技术,它将ChIP获得的DNA片段进行高通量测序,捕捉到细胞内动态的、瞬时的蛋白质与DNA之间的相互结合作用,一次性获取与目的蛋白相结合的DNA序列、确定蛋白的结合分布和精确的结合位点以及结合基序等大量信息。
6. DNA片段加接头,PCR扩增,检查文库浓度,测序
7. 去除低质量reads,将高质量reads比对到参考基因组,得到一系列基因组坐标
8. control使用相同的input chromatin,不使用抗体富集,去除所有蛋白,测序
9. 使用ChIP-seq的reads建立一个genome browser track,记录统计学显著的峰
10. 比较不同样品中相同蛋白的峰;寻找特定蛋白结合的motif;根据蛋白与基因的相对结合位置确定蛋白的功能
156 897 633
5555 689 971
852 31 598
946 377 84
0 5 9877