awk 'BEGIN{} {action} END{}' filename
awk workflow
awk以文件的一行為處理單位误窖,首先將文件逐行讀入,以分隔符將每行切片爵川,
然后再進行各種分析處理.
讀入有\n
換行符的一條記錄榆纽,然后將記錄按照指定的域分隔符(默認為空格和tab)劃分域夺英,填充域皿伺,$0表示所有域缭召,$1表示第一個域栈顷,$n表示第n個域。
首先我隨意寫了一個tab分割的表格嵌巷,命名為lst.gff
chr | gene | start | end | id | description |
---|---|---|---|---|---|
1 | cds | 1 | 23 | skdfsj | sldnfkakfnalksdfa |
3 | intron | 5 | 39 | mksd | slkfmaskfmld |
11 | intron | 212 | 423212 | skdfmak | ksdmfsk |
12 | cds | 5 | 23 | sdklmk | skdflksa |
提取chr, end, start列,并在最后加入一列g(shù)ene
awk {print $1,$4,$3,"gene"}
lst.gff
chr end start gene
1 23 1 gene
3 39 5 gene
11 423212 212 gene
12 23 5 gene
提取chr, start, end列萄凤,并在第一行加上1,2搪哪,3靡努,最后一行加上a, b, c
awk 'BEGIN {print "1,2,3"} {print $1,$3,$4} END{print "a,b,c"}' lst.gff
1,2,3
chr start end
1 1 23
3 5 39
11 212 423212
12 5 23
a,b,c
awk會先執(zhí)行
BEGING{}
中的內(nèi)容
然后讀取文件第一行,按照規(guī)則分割文件晓折,再執(zhí)行pattern和action
接著開始讀入第二條記錄······直到所有的記錄都讀完
最后執(zhí)行END操作
搜索文件中包含“5”的行惑朦,并將其所在行提取出來
awk '/5/{print $0}' lst.gff
3 intron 5 39 mksd slkfmaskfmld
12 cds 5 23 sdklmk skdflksa