linux查漏补缺 1

df -h :查看硬盘有多大,有多少可用空间

image.png

cat是一个命令,主要用来查看文件;在这与 *<<END *连用用于读入大段数据。输入 cat <<END 之后,回车,会看到
终端出现一个大于号,大于号后面可以输入内容,再回车,继续输入内容,直到我们输入 END (大写的,与上面一致),
输入过程结束,我们输入的内容都显示在了屏幕上。

ct@ehbio:~$ cat <<END
a
bc
END
a
bc

rename: 文件重命名 (常用于批量重命名,不同的系统可能用法略有不同,使用前先 man rename 查看使用方法)
rename 'test' 'ehbio' test*.fa

ln (link): 创建软连接 (ln -s source_file target)。
在建立软连接时,原文件要使用全路径。全路径指以/开头的路径。如果希望软链可以让不同的用户访问,不要使用 ~。
建立软连接,是为了在不增加硬盘存储的情况下,简化文件访问方式的一个办法。把其它文件夹下的文件链接到当前目
录,使用时只需要写文件的名字就可以了,不需要再写长串的目录了。

# 通常为了简化写法,使用 `pwd`代替全路径
# `为键盘 Esc 下面的按键,写在反引号内的命令会被运行,运行结果会放置在反引号所在的位置
ct@ehbio:~/ehbio_project$ ln -s `pwd`/ehbio2.fa ../data

gzip: 压缩文件; gunzip: 解压缩文件
gzip -c ehbio.fa >ehbio.fa.gz

wc -l 获取文件的行数

#获取文件中包含大于号 (>) 的行
grep '>' ehbio.fa
# 获取包含> 的行的行数 (-c: count lines)
grep -c '>' ehbio.fa 
# -v: 不输出匹配上的行
grep -v 'end' ehbio.fa >ehbio6.fa

| 为管道符,在相邻命令之间传递数据流,表示把上一个命令的输出作为下一个命令的输入。

sed 是一个功能强大的文件内容编辑工具,常用于替换、取得行号等操作。

ct@ehbio:~/ehbio_project$ cat ehbio6.fa
>mYC HAHA
ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC
CAGGACAGGAGCTA
ct@ehbio:~/ehbio_project$ sed 's/ HAHA//' ehbio.fa 
>mYC
ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC
CAGGACAGGAGCTA
end

另外一个方式,去除 HAHA,使用 cut 命令。cut 更适合于矩阵操作,去除其中的一列或者多列。
-f: 指定取出哪一列,使用方法为-f 2 (取出第 2 列),-f 2-5 (取出第 2-5 列),-f 2,5 (取出第 2 和第 5 列)。
-d: 设定分隔符, 默认为 TAB 键。如果某一行没有指定的分隔符,整行都为第一列。

ct@ehbio:~/ehbio_project$ cut -f 1 -d ' ' ehbio.fa 
>mYC
ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC
CAGGACAGGAGCTA
end

! 加之前输入过的命令的前几个字母(无空格),快速获取前面的命令
!! 表示上一条命令。
替换上一个命令中的字符,再运行一遍命令,用于需要对多个文件执行同样的命令,又不想写循环的情况

# 输入一个命令
ct@ehbio:~/ehbio_project$ #cut -f 1 -d ' ' ehbio.fa | tail -n 4
# !! 表示上一条命令
# :gs 表示替换,把上一个命令中全部的 ehbio 替换为 ehbio3; g: global; s: substitute
ct@ehbio:~/ehbio_project$ !!:gs/ehbio/ehbio3

表示重定向标准输出,> filename 就是把标准输出存储到文件 filename 里面。标准错误还是会显示在屏幕上。
2 >&1 表示把标准错误重定向到标准输出。Linux 终端用 2 表示标准错误,1 表示标准输出。

  • (短横线):表示标准输入,一般用于 1 个程序需要多个输入的时候。
    < 标准输入,后面可以跟可以产生输出的命令,一般用于 1 个程序需要多个输入的时候。相比-适用范围更广。

tr: 是用于替换字符的,把空格替换为换行,文字就从一行变为了一列

ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n'
1
2
3

diff 是比较 2 个文件的差异的,需要 2 个参数
**- **(短横线) 表示上一个命令的输出,传递给 diff
**< **表示其后的命令的输出,也重定向给 diff

ct@ehbio:~$ cat <<END | diff - <(echo "1 2 3" | tr ' ' '\n')
> 2
> 3
> 4
> END
0a1
> 1
3d3
< 4

# 如果不使用管道和重定向标准输入,程序是这么写的
# 先把第一部分存储为 1 个文件
ct@ehbio:~$ cat <<END >firstfile
>2
>3
> 4
> END
ct@ehbio:~$ less firstfile
# 再把第二部分存储为 1 个文件
ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n' >secondfile
# 然后比较
ct@ehbio:~$ diff firstfile secondfile
0a1
> 1
3d3
< 4

sed =:先输出行号,再输出每行的内容

ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed =
1
a
2
b
3
c

N: 表示读入下一行;sed 命令每次只读一行,加上 N 之后就是缓存了第 2 行,所有的操作都针对第一行;
s: 替换;把换行符替换为\t

ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = | sed 'N;s/\n/\t/'
1 a
2 b
3 c

#把读取的奇数行行首加一个'>'(偶数行相当于被隐藏了)
ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = | sed 'N;s/^/>/'
>1
a
>2
b
>3
c

# 把多条序列转成 FATSA 格式
# sed = 同时输出行号
# N: 表示读入下一行;sed 命令每次只读一行,加上 N 之后就是缓存了第 2 行,所有的操作都针对第一行;
# s: 替换;把读取的奇数行行首加一个'>'(偶数行相当于被隐藏了)
# 于是 FASTA 格式序列就出来了
ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' '\n' | sed = | sed 'N;s/^/>/'
>1
actg
>2
aaaaa
>3
cccccg

seq 1 10# 产生从 1 到 10 的数,步长为 1
seq -s ' ' 1 10# 产生从 1 到 10 的数,步长为 1,用空格分割 #最后一个始终为最大值

sort: 排序,默认按字符编码排序。如果想按数字大小排序,需添加-n 参数。
sort 常用参数
-n: 数值排序
-h: 人类刻度的数值排序 (2K 1G 等)
-r: reverse, 逆序
-c: check, 不排序,查看文件是否已排序好
-k: 指定使用哪列或哪几列排序
-m: 合并已经排序好的文件
-S: 缓冲区大小,用于排序大文件时的分割排序中每次分割的文件大小
-u: 重复行只保留一次

# 系统默认按 ASCII 码排序,首先排 0,然后排 1, 3, 6, 9
ct@ehbio:~$ sort test
0
12
15
15
3
3
6
9
9
# 按数值大小排序
ct@ehbio:~$ sort -n test
0
3
3
6
9
9
12
15
15

sort -u: 去除重复的行,等同于 sort | uniq。

ct@ehbio:~$ sort -nu test
0
3
6
9
12
15

sort file | uniq -d: 获得重复的行。

ct@ehbio:~$ sort -n test | uniq -d
3
9
15

sort file | uniq -c: 获得每行重复的次数。

# 第一列为每行出现的次数,第二列为原始的行
ct@ehbio:~$ sort -n test | uniq -c
1 0
2 3
1 6
2 9
1 12
2 15
# 换一个文件看的更清楚
ct@ehbio:~$ cat <<END >test2
a
b
c
b
a
e
d
a
END
# 第一列为每行出现的次数,第二列为原始的行
ct@ehbio:~$ sort test2 | uniq -c
3 a
2 b
1 c
1 d
1 e

awk 是一个强大的文本处理工具,其处理数据模式为按行处理。每次读入一行,进行操作。
• OFS: 输出文件的列分隔符 (output file column separtor);
• FS 为输入文件的列分隔符 (默认为空白字符);
• BEGIN 表示在文件读取前先设置基本参数;与之相对应的是 END,只文件读取完成之后进行操作;
• 不以 BEGIN, END 开头的 {} 就是文件读取、处理的部分。每次对一行进行处理。

ct@ehbio:~$ sort test2 | uniq -c | awk 'BEGIN{OFS="\t";}{print $2, $1}'
a 3
b 2
c 1
d 1
e 1

# 按第二列数值大小排序
ct@ehbio:~$ sort test2 | uniq -c | awk 'BEGIN{OFS="\t";}{print $2, $1}' | sort -k2, 2n
c 1
d 1
e 1
b 2
a 3

# 第二列相同的再按第一列的字母顺序的逆序排序 (-r)
ct@ehbio:~$ sort test2 | uniq -c | awk 'BEGIN{OFS="\t";}{print $2,$1}' | sort -k2,2n -k1,1r
36
e 1
d 1
c 1
b 2
a 3

提取FASTA序列

ct@ehbio:~$ cat test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
>POU5F1
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
>NANOG
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT

# grep 匹配含有 SOX2 的行
# -A 1 表示输出的行中,包含匹配行的下一行 (A: after)
ct@ehbio:~$ grep -A 1 'SOX2' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC

# 也可以使用 AWK
# 先判断当前行是不是 > 开头,如果是,表示是序列名字行,替换掉大于号,取出名字。
# sub 替换, sub(被替换的部分,要替换成的,待替换字符串)
# 如果不以大于号开头,则为序列行,存储起来。
# seq[name]: 相当于建一个字典,name 为 key,序列为值。然后就可以使用 name 调取序列。
# 若命令太长,可在末尾加一个 \, 换行书写
# awk 中$0 ~ />/ 里面的 ~ 不表示家目录,而是一个运算符,用来做模式匹配的
# /pattern/ 则表示与什么模式进行匹配,pattern 代表的是匹配模式
# awk 对文件是按行操作的,{} 里面的语句会对文件的每一行都进行判断或操作,循环执行
# $0: 表示当前行所有内容;$1, $2, $3 表示当前行第 1,2,3 列
# 关于引号,如果最外层用的是单引号,那么里面最好不要再出现单引号
# 如果最外面用的是双引号,则里面最好不要再出现双引号
# 命令会寻找最近的同样引号进行匹配。
ct@ehbio:~$ awk 'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">", "", name);} \
else seq[name]=$0;}END{print ">SOX2"; print seq["SOX2"]}' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC

多行 FASTA 序列提取要麻烦些,一个办法就是转成单行序列,用上面的方式处理。

ct@ehbio:~$ cat <<END >test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGAC
>POU5F1
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
>NANOG
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGG
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGACTGT
END

ct@ehbio:~$ cat test.fasta | tr '\n' '\t' | sed 's/\t>/\n>/g' \
| sed 's/\t/\n/' | sed 's/\t//g' >test.oneline.fa
# 第一步所有行变为一行
# 这一步使用 tr 是因为 tr 里面可以直接识别换行符,而 sed 不可以
# 其它的替换都使用 sed
# >号前面加换行符
# 先把第一 个TAB键变为换行符,实现序列名字和序列的分离
# 再去掉序列中所有的TAB键

或者
ct@ehbio:~$ awk 'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">", "", name);} \
else seq[name]=seq[name]$0;}END{print ">SOX2"; print seq["SOX2"]}' test.fasta
# 对于单行 fasta 文件,只需要记录一行,seq[name]=$0
# 对于多好 fasta 文件,需要把每一行序列都加到前面的序列上,seq[name]=seq[name]$0

如果一个命令需要运行比较久,一般使用 nohup cmmand & 来放入后台不中断运行,这样退出终端也不影响程序。
**command & **是把程序放入后台。
jobs: 查看后台进程
bg: 显示后台进程, 即用 Ctrl+z 挂起或 ‘命令 &’ 执行的进程
fg job_id: 将后台进程转到前台执行
kill –9 process_id: 强制杀掉某个进程

文章来源:生信宝典

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