一、壓縮和解壓縮
1.“.tar.gz”結尾的文件: tar
????tar -cf newfile.tar file1 file2#將file1,file2文件打包到newfile.tar
????tar-zcvf/GSE66507tar.gz#解壓文件
????tar -xzvf test.tar.gz#將test.tar.gz文件解壓并提取里邊的文件
2.“.zip”結尾的文件: zip
????zip newfile.zip file1 file2#將file1,file2進行壓縮到newfile.zip內
????unzip newfile.zip#解壓
3.“.gz”結尾的文件: gzip
#將file壓縮為file.gz
????gzip file
#解壓
????gunzip file.gz
4.“.bz2”結尾的文件: bzip2
#將file壓縮為file.bz2并刪除源文件
????bzip2 file
#解壓
????bunzip2file.bz2
二、數據統計和處理
1.sort 將文本文件內容進行排序
參 數: -n/-g 將文件按數值大小從小到大排序(默認按ascii碼從小到大排序)
? ? ? ? ? ? ?-k按第num列內容對文件排序(默認按第一列)
? ? ? ? ? ? ?-r 反向排序
????sort file#對file文件按第一列內容ascii碼值從小到大排序并輸出。
????sort -n -k 3 file#對file文件按第3列內容數值大小從小到大排序。
????sort -nr -k1,2 file#對file文件按數值大小反向排序,優先考慮第一列,再考慮第二列
2.uniq 合并文件中相鄰的相同的行
參 數:-c 在每行第一列顯示該行重復次數
????????????-d 僅顯示有重復的行
????uniq -c file#合并相同的行,并統計每行重復次數,輸出到屏幕
????uniq -d file outfile#合并相同的行,并顯示file中有重復出現的行,輸出到outfile文件中
#########
3.wc 統計文件中字節數
參 數:-c 只統計字節數/Bytes數
????????????-w 只統計字數(單詞數)
????????????-l 只統計行數
????wc file#顯示文件file的字節數,字數,行數
????wc -l file#顯示文件file的行數
4.grep 查找文件中符合條件的行
參 數:-v 不匹配,顯示文件中不匹配string的行
????grep world file#查找文件中含有“world”的行
????grep -v world file#查找文件中不含有“world”的行
5.awk 對特定的行中特定的列進行操作
參 數:-F 指定列的分割符,可以使任意字符,默認按空白分割
????awk -F “:” ‘{print $1}’#按“:”來分割并打印出第一列
????awk ‘($1 > 100){print $0}’#對第一列大于100的行整行輸出
????awk ‘($1 > 100){print $1”\t”$2}’#對第一列大于100的行輸出第一列和第二列的結果并以“\t”分割
????awk ‘($3~/world/){ x+= $1}END{print x}’#對第三列匹配“world”的行的第一列求和,全部處理完之后輸出結果x的值
6.sed 文本處理并可對文件進行編輯
參 數:-i 直接在原文件中修改(默認修改后屏幕輸出,原文件不變)
????sed -i ‘s/test/new_word/’ file#將file文件中的test字符替換為new_word
????sed -i ‘/pattern/ s/test/new_word/’ file#將file文件中匹配pattern字串的行進行替換操作
????sed -i ‘/^$/ d’ file#將文件file中的空白行刪除(d)
7.du 顯示目錄或文件的大小
參 數:-a 顯示目錄中個別文件大小
????????????-s 只顯示總計
????????????-h 以“K” ,“M” ,“G”為單位顯示
????du -sh ./#顯示當前目錄的大小
????du -ah --max-depth=1 dir#顯示dir目錄下所有文件大小,不包括下一級目錄
8.列出目錄內容:ls
????ls-I grep"^-"|wc-l#當前文件夾文件數目
9.查看文件內容:less
參 數:-S 每行不顯示長于屏幕寬度的字符(默認顯示在下一行)
????????????-N 顯示行號
????????????-e 顯示結束后自動離開?
????????????-f? 強制打開文件
????????????-i? ? 忽略搜索時的大小寫?
????less -SN file
10.顯示文件每行指定范圍的字符:cut
????cut -c 1-10 file#顯示文件file每行開頭的10個字符
????cut -f 1-10 file#顯示文件file每行開頭10列(以“\t”分割)
? ? cut -d “ ” -f 2#顯示文件file第二列(以空格分割)
11.man(查看指定的使用方法)
12.quota- uvs shift#當前存儲空間
13.后臺執行
????nohup sh XXX.sh 2>&1 &
? ? screen
14.后臺命令查看及殺死
????Isof +D HA sort
????kill-9進程號
15.刪除文件
rm:無法刪除"":目錄非空
16.文件獲取
paste、cat文件內容展示拼接
? ??cat 1.txt 2.txt #將不同文件按照先后順序接起來
? ??cat -n 1.txt #顯示行號cat-A1.txt #顯示文件所有信息,包括換行符$ 回車符^M(需特別注意win系統會多出回車符
? ??paste 1.txt 2.txt #可將不同個文件中的內容按照文件順序從左往右排起來
? ??paste -d ':'#指定":"為文件間的分隔符
? ??cat 1.txt | paste - - - #將文件內容從左往右排為3大列
17.ps顯示當前進程的狀態
pstree 該命令列出進程的樹狀關系圖
參數: -A?# 列出所有進程,按照進程ID排序
????????????-a/e# 顯示終端所有進程,包括其他用戶進程
? ? ? ????? -l?#長格式輸出類似top結果
? ? ? ? ? ? -u? 用戶名# 顯示指定用戶名進程? ? ?
? ? ? ? ? ? -x?# 顯示無控制的終端的進程
? ? ? ? ? ? ?-g? 組名?# 顯示一個組的使用情況
? ? ????? ? -H# 列出樹狀結構,表示程序間相互關系
? ? ? ????? -f# 顯示完整格式
? ? ? ????? -ef?#顯示所有進程信息,連同命令行
????????????常用組合: -aux? ? ? ? ? ? -lax? ? ? ? -fx? ? ? ? ? -ef
? ? ps 與grep 常用組合用法,查找特定用戶進程命令:
? ? ps -ef | grep? gu? ?
????jobs -l#可以查看當前終端生效的進程
????ps -ef | grep#進程關鍵字#查找指定進程格式
????ps -u root #顯示root進程用戶信息
18.文件比較diff cmp ,若三個以上則用diff3命令
????diff 1.fa 2.fa# 比較兩個文件差異 ,
????diff? 1.fa 2.fa? -c# 顯示成上下文比較的格式,!表示發生變化
????diff? 1.fa 2.fa? -u# 顯示合并比較的格式,—表示1文件刪除行,+表示2文件新增行
????cmp? 1.fa 2.fa# 標示出兩個文件第一個不同之處的字符和列數編號
三、對文件名的處理操作小技巧
1.只將fq文件的文件名輸出而去除文件路徑,若echo $i則會帶有路徑
????ls ~/wk/fq/clean/*fq | while read id ; do echo $(basename $id); done
2.只將fq文件的文件名輸出 , 刪除.sam的后綴
????ls ~/wk/fq/clean/*fq | while read id ; do echo $(basename $id '.sam' ); done
3.%刪除文件名?.?之后的所有后綴, (如果是${id%.*}則刪除最后一個.后的后綴)
????ls raw/fq/* | while read id ; do echo $(basename ${id%%.*});done
4.##刪除文件名?_?之前的所有前綴 , (如果是${id#*_}則刪除第一個_前的前綴)
????????ls raw/fq/* | while read id ; do echo$(basename ${id##*_});done
四、文件處理
1.命令協作管道 |
| 可將上條指令的結果輸入到下條指令進行操作
echo -n "123456789" | wc -m #去除換行符后統計123456789字符數
ps -aux | less# 將ps結果放在less中查看
head -5 a | tail -2#顯示a文件4、5行
五、命令行界面的一些常用快捷操作
????history 列出1000條歷史命令,再用!數字 執行歷史中對應數字的命令
????!S# 重新執行前面以S開頭的命令
????;# 可按順序從左向右完成多個命令操作,如cd? ../ ; ls? ? ? ? ?
? ? Ctrl + C# 終止當前操作,重新開命令行? ?
? ? Ctrl + L# 進行清屏操作
? ? Ctrl + Z#掛起命令(使用 bg 命令讓其在后臺繼續運行;使用 fg 命令恢復到前臺)
? ? Ctrl + 左右鍵#在單詞之間跳轉
? ? Ctrl + A#跳到本行的行首
? ? Ctrl + E# 跳到行尾
? ? Ctrl + U# 刪除當前光標前面的所有文字(還有剪切功能)
? ? Ctrl + K#刪除當前光標后面的所有文字(還有剪切功能)
? ? Ctrl + Y# 粘貼Ctrl + U或Ctrl + K剪切的內容
? ? Ctrl + W和Alt + D# 對于當前的單詞進行刪除操作,W刪除光標前面的單詞的字符,D則刪除后面的字符
? ? Alt + Backsapce#刪除當前光標后面的單詞
? ? \#代碼太長時利用? \ 可以將代碼分成多段? ? ? ?
? ? bc#自帶計算器,輸入scale=4則保留4位小數
六、單、雙引號區別
單引號:可以說是所見即所得:即將單引號內的內容原樣輸出,或者描述為單引號里面看到的是什么就會輸出什么。單引號''是全引用,被單引號括起的內容不管是常量還是變量者不會發生替換。
雙引號:把雙引號內的內容輸出出來;如果內容中有命令、變量等,會先把變量、命令解析出結果,然后在輸出最終內容來。雙引號""是部分引用,被雙引號括起的內容常量還是常量,變量則會發生替換,替換成變量內容。
不加引號:不會將含有空格的字符串視為一個整體輸出, 如果內容中有命令、變量等,會先把變量、命令解析出結果,然后在輸出最終內容來,如果字符串中帶有空格等特殊字符,則不能完整的輸出,需要改加雙引號,一般連續的字符串,數字,路徑等可以用。
使用規則:一般常量用單引號''括起即可,如果含有變量則用雙引號""括起,無變量無空格無特殊字符的連續字符串可不加引號
最大不同:單引號與雙引號的最大不同在于雙引號仍然可以保有變數的內容,但單引號內僅能是一般字符,而不會有特殊符號
grep ">" a.txt | wc -l #搜索文件中含有'>'的行,并統計行數
grep -c ">" a.txt?# 統計有'>'的行數, 等價于同上
grep -w "chr1" a.txt?# 搜索全詞精確匹配'chr1'的行,-w表示整個word都匹配上
grep -n "chr1" a.txt?#搜索含有字符'chr1'的行并列出行號
grep -vc "chr" a.txt?#統計不含'chr'的行數的個數
grep 'chr' a.txt | grep -v 'chrX'# 搜索文本中含有Chromosome的行并排除有Annotation 行? ? ?
grep -e "chrX" -e "chrY" a.txt?# 參數-e進行多項操作(指定多個匹配模式,只要符合一個都會被輸出)
grep -w "chr1" a.txt -A 2# 搜索全詞精確匹配'chr1'的行行并列出下面兩行。 -A表示after
grep -w "chr1" a.txt -B 2# 使用grep的-B選項,顯示匹配內容及其前n行。-B表示before。
grep -w "chr1" a.txt -C 2# 使用grep的-C選項,顯示匹配內容及其前n行和后n行。
ls /usr/bin/ | grep "\.py"?#搜索特定目錄下名字包含'.py'的文件('.'需要轉義'./')
ls /usr/bin/ | grep "\.py\b"? 或? "\.py$"# 搜索特定目錄中以'.py'結尾的文件( '\b'或'$'表示結尾)
ls /usr/bin/ | grep "^ht"#搜索特定目錄中以'ht'開頭的文件
grep 1[1-9]? a.txt?# 應用正則表達式搜索包含'11'-'19'的行
grep -vP "^\s*$" 1.txt?# 去除空白行
grep -P "^\d{11}$" 1.txt# 匹配含11位數字的行
七、sed (stream editor,流編輯器) (以每行為單位編輯)
注意sed結果默認為屏幕輸出,并不改變原來文件內容,常用>重定向保存修改文件
參數: -e 默認模式,一般用于多項修改,之后常用>重定向保存修改文件
????????????-i 在原文件上直接進行修改
????????????-n 安靜模式,僅顯示處理后的結果,常與p連用,只輸出發生更改的特定行
????????????-f 接腳本文件
sed? ?'s/NC/nc/g'? ?1.txt>2.txt# 對文件中的NC替換成nc并另存為,s表示替換,g表示全局,命令一般用' '括起來
sed? ?'s/A/a/2'? ?1.txt# 對文件中的每行第2個A替換成a
sed? ?'s/b/B/g;s/a/A/g'? ?1.txt# 替換b和a為大寫,同時進行多項操作可用`;`分隔開
sed? ?'1,5s/:/?/g'? ?2.txt# 只對文件的1至5行內容進行替換':'為'?'
sed? ?'1,5!s/:/?/g'? ?2.txt# 只對文件的1至5行內容不進行替換,!表示非
sed? ?'/>/!s/A/a/g'? ?gene.fasta# 對含有>的行不進行操作,其他行進行替換
sed? ?'/beat/,/ggle/s/o/O/g'? ?1.txt# 將含有'beat'和'ggle'字符行的中間行的'o'替換成'O',選擇條件之間用`/`和`,`隔開#?
sed常用的應用: 將fastq格式轉化為fasta格式zcatA.1.fq.gz|sed'0~4d'|sed'0~3d'|sed's/^@/>/1'|less