歡迎關(guān)注生信寶典:
Linux學(xué)習(xí)系列文章是生信寶典最開始主推的一塊,力圖從一個新額視角幫助初學(xué)者快速入門Linux系統(tǒng),熟悉Linux下的文件和目錄,文件操作, 文件內(nèi)容操作。而且教程摒棄了完美操作,列舉出,解惑Linux下多種信息輸出方式。
在中簡述了awk和sed的使用,作為一個引子。本篇則詳細(xì)列舉關(guān)于awk常用的操作和一些偏門的操作。
awk擅長于對文件按行操作,每次讀取一行,然后進(jìn)行相應(yīng)的操作。
awk讀取單個文件時的基本語法格式是awk 'BEGIN{OFS=FS="\t"}{print $0, $1;}' filename。
讀取多個文件時的語法是awk 'BEGIN{OFS=FS="\t"}ARGIND==1{print $0, $1;}ARGIND==2{}' file1 file2。
awk后面的命令部分是用引號括起來的,可以單引號linux常用命令,可以雙引號,但注意不能與內(nèi)部命令中用到的引號相同,否則會導(dǎo)致最相鄰的引號視為一組,引發(fā)解釋錯誤。
OFS: 文件輸出時的列分隔符 (output field separtor)
FS: 文件輸入時的列分隔符 (field separtor)
BEGIN: 設(shè)置初始參數(shù),初始化變量
END: 讀完文件后做最終的處理
其它{}:循環(huán)讀取文件的每一行
$0表示一行內(nèi)容;$1, $2, … $NF表示第一列,第二列到最后一列。
column屬性(當(dāng)前字符位置的列號)和line屬性(文件當(dāng)前行號):在打開一個文件后,行和列指針都被設(shè)置為1。當(dāng)前讀:特殊的讀操作,插入/更新/刪除操作,屬于當(dāng)前讀,需要加鎖。低級文件i/omatlab低級文件i/o函數(shù)fclose 關(guān)閉文件feof 測試文件結(jié)束ferror 查詢文件i/o的錯誤狀態(tài)fgetl 讀文件的行l(wèi)inux常用命令,忽略回行符fgets 讀文件的行,包括回行符fopen 打開文件fprintf 把格式化數(shù)據(jù)寫到文件或屏幕上fread 從文件中讀二進(jìn)制數(shù)據(jù)frewind 返回到文件開始fscanf 從文件中讀格式化數(shù)據(jù)fseek 設(shè)置文件位置指示符ftell 獲取文件位置指示符fwrite 把二進(jìn)制數(shù)據(jù)寫到文件里技術(shù)凝聚實(shí)力專業(yè)創(chuàng)新出版技術(shù)凝聚實(shí)力專業(yè)創(chuàng)新出版18.3.1 fopen函數(shù)? fopen函數(shù)打開一個文件并返回這個文件的文件句柄值。
a[$1]=1: 索引操作,類似于python中的字典,在ID map,統(tǒng)計中有很多應(yīng)用。
ct@ehbio:~/sxbd$ cat ehbio.wig
variableStep chrom=chr2
300701 12.5
300702 12.5
300703 12.5
300704 12.5
300705 12.5
ct@ehbio:~/sxbd$ awk 'BEGIN{OFS=FS="\t"}{$2=$2*10^6/(2.5*10^6); print $0}' wig
tep chrom=chr2 0
300701 4.4
300702 4.8
300703 4
300704 4.8
300705 4.8
ct@ehbio:~/sxbd$ cat count
ID Type
Pou5f1 Pluripotency
Nanog Pluripotency
Sox2 Neuron
Tet1 Epigenetic
Tet3 Epigenetic
Myc Oncogene
ct@ehbio:~/sxbd$ awk 'BEGIN{OFS=FS="\t"}{if(FNR>1) a[$2]+=1;}END{print "Type\tCount"; for(i in a) print i,a[i];}' count
Type Count
Neuron 1
Epigenetic 2
Oncogene 1
Pluripotency 2
# 這個也可以用下面方式代替,但不直接
ct@ehbio:~/sxbd$ tail -n +2 count | cut -f 2 | sort | uniq -c | sed -e 's/^ *//' -e 's/ */\t/'
2 Epigenetic
1 Neuron
1 Oncogene
2 Pluripotency