1、解析路径获取文件名和目录名。
获取文件名
#awk解法:用“/”做分隔符,然后打印出最后的那一部分。
resFile=`echo /tmp/****/zhengyi/test/adb.log | awk -F "/" '{print $NF}'`
#官方解法(basename):Bash Shell本身提供了basename命令,可以直接获取路径名最后的文件名。
resFile=`basename /tmp/****/zhengyi/test/adb.log`
获取目录名
#awk解法:可以灵活的使用分隔符,混合正则表达式。
dirPath=`echo /tmp/****/zhengyi/test/adb.log | awk -F '/[^/]*$' '{print $1}'`
#awk+for循环的方法
echo /tmp/****/zhengyi/test/adb.log | awk 'BEGIN{res=""; FS="/";}{ for(i=2;i<=NF-1;i++) res=(res"/"$i);} END{print res}'
#官方解法(basename):Bash Shell本身提供了dirname命令,特别方便,可以直接获取路径对应的目录名。
dirPath=`dirname /tmp/****/zhengyi/test/adb.log`
2、Soap文件中求出每个染色体的总测序长度(即第6列的加和)。
=> head test.soap SIMU_0001_00000001/ AAATATGTGGATATAAACACATTCCTAAATAACCG hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr1 A->11T40 35M 11A23 SIMU_0001_00000002/ CCGGGGCCCAGCGCAGGGGCTGATGAGAAGGCACT hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr2 35M SIMU_0001_00000003/ TTCCCCTTTGATCTGATGTCCACCTGGAAACCGTG hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr2 35M SIMU_0001_00000004/ TTTATATGGTGTTAGCCTTTCTTCCAAATTTTAAG hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr3 A->14G40 35M 14A20 SIMU_0001_00000005/ ACCCATGGCAGACCCCCTTATCTTAACTCAAGTGT hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr1 A->2C40 35M 2A32 SIMU_0001_00000006/ GCTTACACTGGAATTAACAAGTTTTAGTATATTAT hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr10 35M SIMU_0001_00000009/ TTTTCTTCTATGAAGTTTGGGAGAAAAGTCAAGAT hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr1 35M SIMU_0001_00000010/ GGTCACCACAGAATATGATATAAATAAGATAAATA hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr2 35M SIMU_0001_00000011/ TACTTTTGGATTATATGCTAAACAGTGTGACTATA hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr1 35M SIMU_0001_00000013/ TTCCCTGGTAAGGGCTCATGCCTTGGCACTGAGGG hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh a - chr12 35M 35
#awk代码实现:
=> head test.soap |awk '{a[$8]+=$6}END{for (i in a) print i,"\t",a[i]}' chr10 chr12 chr1 chr2 chr3
3、Linux下用awk计算Fasta序列的长度
=> cat contig.fa > cvg_0.0_tip_0 ATTTTGGCTTTGGAAGGGC > cvg_0.0_tip_0 GAATAGTGATACAAATTATATAGTTTCAAGTATGTGACTTGAACATGAGATTAT > cvg_0.0_tip_0 TAATCTAGGCTTGAAACTATATAATTTGTATCACTATTCTAAGGATTTTTTT
首先通过下面的命令将fasta序列转换成一行显示,命令如下:
=> awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' contig.fa 或者: => awk '{ printf "%s",/^>/ ? $0" ":$0"\n" }' contig.fa
得到如下结果:
如果想直接显示每条序列的长度,可以运行如下命令:
=> awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' contig.fa |awk '{print $1"\t"length($3)}'
得到结果如下:
> > >