[生信技能树线下]Linux课堂回顾

Linux部分一直是我心头的大山,感觉很难翻过去了,那么学习愚公,一勺一勺的慢慢挖吧。

先从复习和回顾课堂上的内容开始。

文件目录命令

  • mkdir 创建文件夹/目录
    • -p 建立多层目录 mkdir -p test1/test2/test3
  • cd 目录切换
  • ls 目录展示
  • tree 树形展示
    • -d 只看目录
    • -L num 显示num层目录
  • touch 创建文本 一般用它来判断该目录的写入权限
    • touch new.txt
  • rm 删除文件
    • rm -r 递归删除,删除目录
    • rm -i 搞不清楚有没有删错前可以加上 删除前询问
  • cp 复制/拷贝
    • cp -i 覆盖前询问
    • cp -r 复制目录及其内所有项目
    • 目标路径必须提前建好,不带有新建目录的功能
  • less 查看大文本
    • -S 大写 单行显示,看表达矩阵是方便对齐
    • -N 大写 加编号
    • less之后的操作不会改变原文本
  • vim 编辑文本
    • 进入编辑器后,我们先按i,即切换到“插入”状态。就可以通过上下左右移动光标,或空格、退格及回车等进行编辑内容了。
    • ESC退出编辑模式
      shift+q 进入命令模式
    • 在冒号后面写 q退出, w保存
      wq 或者x:写入并退出
    • q!:不保存退出
    • !:直接退出
  • cat 输出/入(小)文本/查看小文本
    • cat > newfile
    • cat file
  • head 展示文件前几行
    • head -n 3 file
  • tail 展示文件后几行
    • tail -n 4 file
  • mv 移动文件/目录
    • 也是不能新建目录
  • > 重定向
  • >>追加 通常用追加,避免覆盖清空原文件
  • |管道符
  • history查看历史命令
    • history | rail -n 5 > history.txt
  • ln 建立链接,相当于创建快捷方式
  • 查看帮助文档 -- help (两个-)

进阶命令一

  • cut 文件切割,配合管道符内容使用
    • -d 定义分隔符,默认为\t
    • -f 制定分割后输出第几列
    • eg less -S | annotation.gtf.gz | cut -f 1,3-5 | less -S
  • paste 粘贴,文本按列合并,默认分隔符是\t
    • -s 文件按行合并
  • sort 排序
  • uniq 去除重复行
  • find 寻找文本/目录
  • tr
    • 注意tr [atcg] [tcga] 是把“a换成t,t换成c,c换成g,g换成a“,而不是字符串atcg去匹配
  • wc 计算文本大小,行数,字符数

进阶命令二

三大命令:sed, grep, awk

sed

个人理解:编辑文本,"替换",按条件打印包含模版的行

崔老师的讲解:https://www.jianshu.com/p/1a853a0315d5

可依照script的指令,来处理、编辑文本文件。 多用于对文本的行来操作,
常见 sed [option] 's///g' tmp.txt

为了方便理解,走一遍动作说明的代码,然后写出解释:

echo 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0|sed 's/Bcast.*$//g'

返回了192.168.1.100。输入到截止"Bcast"前面的内容

由于输出内容很多,密密麻麻的,替换的地方可能察觉不到,建议眼花如我的都先不要sed,看看原始的长什么样子,然后截屏比较命令的差别。

编辑文本,替换

nl /etc/passwd |sed 's/:/\t/'|less -S

把":"分割成"tab",只替换第一个。

**如果要全部都替换则加上gsed 's/:/\t/g' **

nl 表示给列出的内容加上行号

nl /etc/passwd |sed '4,$s/:/\t/'|less -S

s和g分别表示开始和结束所以这里表示从第4行到最后一行(4,$)执行上述替换

nl /etc/passwd | sed -e 's/root/#####/' -e 's/qmcui/###!!!/'|less -S

-e:表示多次使用sed,这句里面执行了两个替换:root换成#####,qmcui换成###!!!

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

删除3-最后一行,d表示删除动作;然后替换bash为blushell

nl /etc/passwd | sed -e 's/:/\t/;s/:/\t/'|less -S

用分号串联,替换了两次, 要想全部替换,+g,见上

nl /etc/passwd | sed 's/false$/&! ! !/' | less -S

在行末找到false后,在后面加三个叹号,&表示match的对象,也可以写成&&!!!,这样就又加了一个false

a:新增,a 接字串,而这些字串会在新的一行出现(目前的下一行)~

nl /etc/passwd | sed '1a\llll llllllll \n lllllll'|less -S

在第1行下面新增一行(a),单引号''里面是新增的内容,\n表示换行

i:相应的,i表示向上新增一行插入。

nl /etc/passwd | sed '2i drink tea' | cat -n

d :删除, d 后面通常不接任何内容

nl /etc/passwd | sed '3,$d'

删除第3到最后一行

c :取代, c接字串,这些字串可以取代 n1,n2 之间的行!

nl /etc/passwd | sed '2,5c No 2-5 number'

将第2-5行替换成"No 2-5 number"字符串。变化一下:sed '2,$c No End'

打印符合条件的/包含模版的行

-n :输出包含模版的行

p :打印,通常 p 会与参数 sed -n 一起运行~

nl /etc/passwd | sed -n '5,7p'    # 输出5-7行

nl /etc/passwd | sed -n '2p;4,5p' #输出第2行和4-5行

nl /etc/passwd |sed -n '4,+5p' # 输出第4行,以及往下5行

nl /etc/passwd | sed -n '4~4p' # 输出第4行,以及每隔4行输出

nl /etc/passwd | sed -n '/root/p'   # 只打印包含模式“root”的行,替换成别的字符串也行,类似于查找了

小结

  • sed命令的标准句式是sed [option] 's///g' tmp.txt,也可以借由管道符使文件(tmp.txt)是从前面传递而来的。
  • 其中参数放在[option]处,比如-e多次使用,-n打印特定行(和动作命令p配合使用)
  • a,c,d,i,e,s,g这些都是动作命令,放在单引号''内
  • $表示末行或行末;&表示匹配的对象,不要搞混了
  • 处理区域的选择规则写在's///g'的"s"前面。
    • 可以是数字,"1,5"表示1-5行,与R语言区别;
    • 可以是/pattern1/,选择含有pattern2的行;
    • 还可以是/pattern1/,/pattern2/,表示选择以pattern1起始,到pattern2结束的区域。

grep

个人理解:文本搜索,抓取

崔老师的讲解:https://www.jianshu.com/p/22a4324ddfdf

即(global regular expression print);Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行/特定内容打印出来。

匹配特征:grep默认一些简单正则,如^,$等,

参数多;常用的也多

直接就输出了,还会把匹配的部分用颜色高亮

nl /etc/passwd | grep 'qmcui'

提取含有'qmcui'的行

-v 参数

-v –invert-match:取没有匹配的行,反向选择

nl /etc/passwd | grep -v 'qmcui'

反向选择没有'qmcui'的行

-w 参数

-w –word-regexp:只选择匹配上整个 words,完全匹配

nl /etc/passwd | grep -w  "root"

这个不明显,比较一下下面这两个

nl /etc/passwd | grep  "100"
nl /etc/passwd | grep -w  "100"

[图片上传失败...(image-83f862-1555911189748)]

-i 参数

-i,–ignore-case:忽略Pattern 和文件内容的大小写

nl /etc/passwd | grep -i VIP

-e 参数

-e:多个-e 可以用来描述多个不同的匹配模式 ;or

sed命令里面的-e一样

nl /etc/passwd | grep -ie 'Server' -e 'root' -e 'qmcui'

一下两个是等同的,正则表达式

nl /etc/passwd | grep -e 'root' -e 'qmcui'
nl /etc/passwd | grep 'root\|qmcui'

-o 参数

-o:-n形式输出匹配内容,只输出匹配的内容

一般直接用似乎没有什么用,但是后面跟着wc可以计算匹配的数目或者行数,或者用-io模糊查找,返回输出正确的格式等等

-A / -B / -C 参数

邻居参数,输出匹配行的前后邻居们

-A :输出匹配行之的num行

-B :输出匹配行之的num行

-C :输出匹配行前后各num行

注意C的大小写!!!

-c 参数

-c 输出计数后的几行

自带计数参数

nl /etc/passwd | grep  -c  'qmcui'
nl /etc/passwd | grep -ie 'Server' -e 'root\|qmcui' -c

-n 参数

-n –line-number 显示行号

nl /etc/passwd | grep -n 'qmcui' # 这样用好没意义啊,nl本身就加了行号

-f 参数

-f FILE ,–file=FILE 从FILE中获得匹配的数据

# $ cat  match.txt      # cat >match.txt
# root
# qmcui
less /etc/passwd | grep -f match.txt

把文件match.txt中的内容进行匹配。

awk

个人理解:在文本里面抓取元素,然后进行运算。

崔老师的讲解:https://www.jianshu.com/p/b6aec932adcf

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

另一个写的不错的博客

https://indexofire.gitbooks.io/notebook_of_analyzing_pathogen_ngs_data/content/appendix/awk.html

基本句式

awk [option] '{pattern + action}' {inputfilenames} # sometims muti file is ok
awk [option] 'BEGIN{初始代码} {循环代码} END{最后代码}' filename

也可以理解为'BEGIN{运行前} {运行中} END{运行后}'。

另一篇博客把句式写为awk 'pattern { action }' input_file,他认为BEGIN也是一种pattern

awk 程序内容很简单,主要包括 pattern,action和输入文件:

  • pattern 表示所要搜索的内容,可以用正则表达式
  • { action } 则表示搜索匹配后要做的操作。
  • 输入文件:所要搜索的输入内容

awk 可以不需要输入文件;对于pattern和action来说,2者至少要有一个才能运行。如果没有pattern,则默认匹配任何输入,按行输出并执行action。如果没有action,则匹配pattern并按行输出不做额外操作。

最简单的语句,最好理解awk的功能。输入1 2 3,用$来索引使用

echo 1 2 3 |awk '{ print "total pay for", $1, "is", $2 * $3 }'
# total pay for 1 is 6

-F参数: 指定分隔符

以':'分割,输出第一个元素。

echo $PATH | awk -F ':' '{print $1}'

awk -F '[;:]' 指定多个分隔符。

体会BEGIN和END

以下两命令都是截取第1和第7个元素输出,第二句在输出内容前面加一行"name,shell",后面加一行"blue,/bin/nosh"。

cat /etc/passwd |awk  -F ':'  '{print $1","$7}'
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'

统计计数

对内容"/etc/passwd"计数并输出结果($0输出输入的内容).

awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd

对内容"/etc/passwd"进行":"分割,开始时定义count=0,定义action:输出改行第一元素,然后计数+1。利用循环来输出。

NR表示行号。

awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd

生信分析应用场景

这一讲内容很多,命令的变化很多,更加复杂了。简单理解一下在做生信分析时的应用场景(举个🌰):

对列的操作:提取、排序、插入

生成的bam文件提取后续分析需要的列,并调整排序:

awk -F '\t' '{print $1,$7,$8,$9,$10}' OFS='\t' Cr_DJ-osdrm2_fCount.out > WT_osdrm2_matrix.out

awk '{ print $3, $5, $7, $2, $1, $4, $6 }' infile.txt > outfile.txt

# insert
awk '{ print $1, $2 "gene expression", $3}' infile.txt > outfile.txt

去除重复行

awk '!x[$0]++' infile.txt > outfile.txt

根据阈值挑选差异基因

awk '{if(($10<-2)&&($11<0.001))print $3"\t"$8"\t"$9"\t"$10}' gene_exp.diff | grep -v 'inf' > down.txt  
## 筛选出下调的基因(log2_fold_change < -2 & pvalue < 0.001)

awk '{if(($10>2)&&($11<0.001))print $3"\t"$8"\t"$9"\t"$10}' gene_exp.diff | grep -v 'inf' > up.txt 
## 筛选出上调的基因(log2_fold_change > 2 & pvalue < 0.001

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容