df -h :查看硬盤有多大,有多少可用空間
cat是一個命令纷妆,主要用來查看文件;在這與 *<<END *連用用于讀入大段數(shù)據(jù)墅冷。輸入 cat <<END 之后纯路,回車,會看到
終端出現(xiàn)一個大于號俺榆,大于號后面可以輸入內(nèi)容感昼,再回車,繼續(xù)輸入內(nèi)容罐脊,直到我們輸入 END (大寫的定嗓,與上面一致),
輸入過程結束萍桌,我們輸入的內(nèi)容都顯示在了屏幕上宵溅。
ct@ehbio:~$ cat <<END
a
bc
END
a
bc
rename: 文件重命名 (常用于批量重命名,不同的系統(tǒng)可能用法略有不同上炎,使用前先 man rename 查看使用方法)
rename 'test' 'ehbio' test*.fa
ln (link): 創(chuàng)建軟連接 (ln -s source_file target)恃逻。
在建立軟連接時,原文件要使用全路徑藕施。全路徑指以/開頭的路徑寇损。如果希望軟鏈可以讓不同的用戶訪問,不要使用 ~裳食。
建立軟連接矛市,是為了在不增加硬盤存儲的情況下,簡化文件訪問方式的一個辦法诲祸。把其它文件夾下的文件鏈接到當前目
錄浊吏,使用時只需要寫文件的名字就可以了宿亡,不需要再寫長串的目錄了岩遗。
# 通常為了簡化寫法,使用 `pwd`代替全路徑
# `為鍵盤 Esc 下面的按鍵叶雹,寫在反引號內(nèi)的命令會被運行着憨,運行結果會放置在反引號所在的位置
ct@ehbio:~/ehbio_project$ ln -s `pwd`/ehbio2.fa ../data
gzip: 壓縮文件; gunzip: 解壓縮文件
gzip -c ehbio.fa >ehbio.fa.gz
wc -l 獲取文件的行數(shù)
#獲取文件中包含大于號 (>) 的行
grep '>' ehbio.fa
# 獲取包含> 的行的行數(shù) (-c: count lines)
grep -c '>' ehbio.fa
# -v: 不輸出匹配上的行
grep -v 'end' ehbio.fa >ehbio6.fa
| 為管道符墩衙,在相鄰命令之間傳遞數(shù)據(jù)流,表示把上一個命令的輸出作為下一個命令的輸入甲抖。
sed 是一個功能強大的文件內(nèi)容編輯工具底桂,常用于替換、取得行號等操作惧眠。
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
! 加之前輸入過的命令的前幾個字母(無空格)祈纯,快速獲取前面的命令
!! 表示上一條命令令宿。
替換上一個命令中的字符,再運行一遍命令腕窥,用于需要對多個文件執(zhí)行同樣的命令粒没,又不想寫循環(huán)的情況
# 輸入一個命令
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 個程序需要多個輸入的時候厕妖。
< 標準輸入,后面可以跟可以產(chǎn)生輸出的命令挑庶,一般用于 1 個程序需要多個輸入的時候。相比-適用范圍更廣软能。
tr: 是用于替換字符的迎捺,把空格替換為換行,文字就從一行變?yōu)榱艘涣?/p>
ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n'
1
2
3
diff 是比較 2 個文件的差異的查排,需要 2 個參數(shù)
**- **(短橫線) 表示上一個命令的輸出凳枝,傳遞給 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 =:先輸出行號岖瑰,再輸出每行的內(nèi)容
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
#把讀取的奇數(shù)行行首加一個'>'(偶數(shù)行相當于被隱藏了)
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: 替換动漾;把讀取的奇數(shù)行行首加一個'>'(偶數(shù)行相當于被隱藏了)
# 于是 FASTA 格式序列就出來了
ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' '\n' | sed = | sed 'N;s/^/>/'
>1
actg
>2
aaaaa
>3
cccccg
seq 1 10# 產(chǎn)生從 1 到 10 的數(shù),步長為 1
seq -s ' ' 1 10# 產(chǎn)生從 1 到 10 的數(shù)荠锭,步長為 1旱眯,用空格分割 #最后一個始終為最大值
sort: 排序,默認按字符編碼排序证九。如果想按數(shù)字大小排序删豺,需添加-n 參數(shù)。
sort 常用參數(shù)
-n: 數(shù)值排序
-h: 人類刻度的數(shù)值排序 (2K 1G 等)
-r: reverse, 逆序
-c: check, 不排序甫贯,查看文件是否已排序好
-k: 指定使用哪列或哪幾列排序
-m: 合并已經(jīng)排序好的文件
-S: 緩沖區(qū)大小吼鳞,用于排序大文件時的分割排序中每次分割的文件大小
-u: 重復行只保留一次
# 系統(tǒng)默認按 ASCII 碼排序,首先排 0叫搁,然后排 1, 3, 6, 9
ct@ehbio:~$ sort test
0
12
15
15
3
3
6
9
9
# 按數(shù)值大小排序
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: 獲得每行重復的次數(shù)疾党。
# 第一列為每行出現(xiàn)的次數(shù),第二列為原始的行
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
# 第一列為每行出現(xiàn)的次數(shù)惨奕,第二列為原始的行
ct@ehbio:~$ sort test2 | uniq -c
3 a
2 b
1 c
1 d
1 e
awk 是一個強大的文本處理工具雪位,其處理數(shù)據(jù)模式為按行處理。每次讀入一行梨撞,進行操作雹洗。
? OFS: 輸出文件的列分隔符 (output file column separtor);
? FS 為輸入文件的列分隔符 (默認為空白字符)卧波;
? BEGIN 表示在文件讀取前先設置基本參數(shù)时肿;與之相對應的是 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
# 按第二列數(shù)值大小排序
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 調(diào)取序列。
# 若命令太長落午,可在末尾加一個 \, 換行書寫
# awk 中$0 ~ />/ 里面的 ~ 不表示家目錄谎懦,而是一個運算符,用來做模式匹配的
# /pattern/ 則表示與什么模式進行匹配溃斋,pattern 代表的是匹配模式
# awk 對文件是按行操作的界拦,{} 里面的語句會對文件的每一行都進行判斷或操作,循環(huán)執(zhí)行
# $0: 表示當前行所有內(nèi)容梗劫;$1, $2, $3 表示當前行第 1,2,3 列
# 關于引號享甸,如果最外層用的是單引號,那么里面最好不要再出現(xiàn)單引號
# 如果最外面用的是雙引號梳侨,則里面最好不要再出現(xiàn)雙引號
# 命令會尋找最近的同樣引號進行匹配蛉威。
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
# 第一步所有行變?yōu)橐恍?# 這一步使用 tr 是因為 tr 里面可以直接識別換行符,而 sed 不可以
# 其它的替換都使用 sed
# >號前面加換行符
# 先把第一 個TAB鍵變?yōu)閾Q行符丙躏,實現(xiàn)序列名字和序列的分離
# 再去掉序列中所有的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 掛起或 ‘命令 &’ 執(zhí)行的進程
fg job_id: 將后臺進程轉到前臺執(zhí)行
kill –9 process_id: 強制殺掉某個進程
文章來源:生信寶典