Linux note_awk

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列,并在最后加入一列gene

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会先执行BEGING{}中的内容
然后读取文件第一行,按照规则分割文件,再执行pattern和action
接着开始读入第二条记录······直到所有的记录都读完
最后执行END操作

搜索文件中包含“5”的行,并将其所在行提取出来

awk '/5/{print $0}' lst.gff

3   intron  5   39  mksd    slkfmaskfmld
12  cds 5   23  sdklmk  skdflksa

你可能感兴趣的:(Linux note_awk)