【AWK】 部分技巧

2019-10-14  本文已影响0人  Silver_42ac

【AWK】 部分技巧

1、split

split($9,a,";");
a[0]
a[1]

a 是python 中的列表(自动根据存入数据类型,变为什么变量)

这里意思是使用分隔符 “;” ,分割第9列,分割元素存入a

可以作为列表,取相应的元素 a[0];a[1]

2、gsub

gsub("Ref","",$9);

单独一句,替换,这里是讲第9列 内容 "Ref" 替换为空字符串 "",直接在第九列$9生效

3、输入文件分隔符 FS

FS( Field Separator ) : 列分割符。决定了怎么将一行划分为几段。预设值是 空白符(空白和Tab)


awk ' FS=";" {print $1} ' 

以";",作为分隔符,输入元素

4、输出文件分隔符 OFS

awk ' OFS="\t" {print $1,$3,$4}

以tab,作为分隔符,输入元素;输出的内容是 第一、三、四列使用tab链接的字符串

5、读多个文件

(1)多文件区分读取

ARGIND :输入文件编号

awk 'ARGIND==1{ print NR }ARGIND==2{ print  FNR }' A.gff  B.fa

ARGIND==1{ do samething } 就是读 第一个参数 A.gff 时 做的操作

ARGIND==2{ do samething } 就是读 第二个参数 B.fa 时 做的操作

(2)多文件判断

NR:表示awk开始执行程序后所读取的数据行数。

FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。

NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。

awk ' NR==FNR{ do something }NR!=FNR{ do something }' A.gff  B.fa

当NR 等于 FNR 时就是在读取第一个文件的时候

当NR 不等于 FNR 时就是再读取第二个文件的时候

和上面 ARGIND==1 ARGIND==2 同样作用,不过这种方法只能用于两个文件;两个以上文件需要用ARGIND 进行判断

5、哈希hash (字典dict)

和python 中的 字典一个意思

awk '{ a[$1]=$2;print a[$1]}'

直接就存入变量名a 中;自动按照字典方式存入

调用只需要a[ key ]即可, 变量名,可以随意不用a也行

6、匹配判断

if($0~/^>/){do  something}

匹配的含义就是字符串中是否能找到/中的匹配内容/; 而// 中可以直接写正则表达式 表示一定规律的内容

正则表达式解释:

/^>/ 解释 :// 中的^ 三角角标 表示字符串"最前面" ; 这句话表示去匹配最前面的>大于号

结构

被匹配的字符串~/匹配内容/

~ 表示匹配

// 则用来限制匹配内容的范围

不匹配判断则是

if($0!~/^>/){do  something}

解读一个例子;进行学习

awk 'ARGIND==1{if($3~/mRNA/){split($9,a,"ID=AA_");split(a[2],b,";");if($1~/LG/){split($1,c,"LG");$2="AA_"c[2]"g"b[1]}else{split($1,c,"scaffold_");$2="AA_"c[2]"s"b[1]}; d[">AA"b[1]]=$2;line=$1"\t"$2"\t"$4"\t"$5"\tAA"b[1];print line >>"genomic.new.mod.gff" }}ARGIND==2{if($0~/^>/){$1=">"d[$1]};{print $0 >>"aoaas.pep.mod.fa"}}' aoaas.gff aoaas.pep.fa
上一篇 下一篇

猜你喜欢

热点阅读