#基因组干货#生物信息学文本处理大杂烩(三)
兑现DNA连串反向互补
cat seq.txt | sed 'y/ATGC/TACG/' |rev
还是先创建bed文件:
# 使用 randomBed创建bed文件:
randomBed -seed 2 -n 1000 -l 400 -g ./hg19.chrom_24.sizes >./a.bed
# 查看前10行:
head a.bed
对多少个文件相继merge
这里四个文件行数相等,在那之中ampl列将新的和旧的染色体、地点关系起来,第多个公文将第五列(ampl列,值为ampl1,ampl2...卡塔 尔(阿拉伯语:قطر存入风华正茂二三列(旧染色体,旧初叶地点,旧甘休地方卡塔 尔(英语:State of Qatar)为下标的关联数组ampl,第二个公文依照黄金年代二三列(旧染色体,旧开始地方,旧甘休地方卡塔 尔(英语:State of Qatar)收取关联数组的值(ampl1,ampl2...),将关全面组的值作为关乎数组下标新成立关联数组Ampl,将第1个文件的值(1,2,3,4,5列,此中4、5列是我们要的新闻卡塔 尔(英语:State of Qatar)用sprintf生成字符串存入Ampl,第三文件依据第四列(ampl1,ampl2...卡塔尔,用split切割sprintf生成的字符串,抽取第一个公文存入的值(这里只收取了急需的4,5列,123列的值输出第三个文本的123列(新染色体,新苗头地方,新得了地点卡塔尔的值卡塔 尔(英语:State of Qatar)。那样Oldpanel_start_end.sort.bed 对应的旧的染色体和岗位,被hg38amplicon_start_end.bed新的四个染色体和岗位替代,况且将旧文件染色体和岗位在amplGChg19.txt 对应的消息成功转移到新生成的新岗位文件中
awk 'BEGIN{FS="t";OFS="t"}{if(NR==FNR){ampl[$1,$2,$3]=$5;N=NR}else if(NR<=2*N){Ampl[ampl[$1,$2,$3]]=sprintf("%s,%d,%d,%s,%s",$1,$2,$3,$4,$5);}else{split(Ampl[$4],array,",");print $1,$2,$3,array[4],array[5],$4}}' Oldpanel_start_end.sort.bed amplGChg19.txt hg38amplicon_start_end.bed | sort -k1 > hg38amplicon_Gene_GC.txt
这一次讲awk 的数组及运用
对三个公文去重取并集
cat NewpanelGene.bed Oldpanel.gene.bed | sort -u > merge.gene.bed #sort -u = sort | uniq ,相当于sort 之后,将重复相邻行变成只有一行
改变后的结果应该是以此样子的:
对多个文本根据第一列实行筛选,筛选规范是必须在别的多个文书的率先列现身过
awk -F "," '{if(NR==FNR){count[$1]=1}else if(count[$1]==1){print $0}}' chr.txt test.csv #将第一个文件第一列的值存入关联数组,并给值为1,如果第二个文件建立的关联数组对应值为1,说明在第一个文件第一列出现过,则输出整行
仍为能够透过length函数拿到数董事长度,但awk有几许个本子,用的超多的时gawk,在使用函数以至awk内置变量时应该安转gawk:
sudo apt-get install gawk
awk '{a[$1];print "当前数组长度为:",length(a)}' hg19.chrom_24.sizes
随着读取行数大增,数CEO度也在增多。
越多原创优越内容敬请关心生信故事集:
删除#发端的注释行
sed '/^#.*/d' test.txt
# 可以用数值作数组索引(下标)
Tarray[1]=“cheng mo”
Tarray[2]=“800927”
# 可以用字符串作数组索引(下标)
Tarray[“first”]=“cheng ”
Tarray[“last”]=”mo”
Tarray[“birth”]=”800927”
# 也可以这样:
Tarray[“first”t"last"]=”chengmo”
将行逆序输出
sed '1!G;h;$!d'file # 1!G 第一行不执行G命令,从第二行开始执行;$!d 最后一行不删除;第一行自动存入模式空间,将模式空间内容(第一行)放到保持空间(h),然后删除模式空间内容(d,否则它会自动输出),第二行自动存入模式空间,(开始用G)将保持空间(第一行内容)接到模式空间(第二行)后,将当前模式空间(第二行 第一行)放到保持空间(h),然后删除当前模式空间(d),依次类推,最后一行不删除模式空间,再自动输出模式空间内容
tac file
其生龙活虎bed文件呈现的第四列是行号排序,今后大家想将它替换为相应的染色体的长度,比如chr1的长度是249250621,chr2的尺寸是243一九九四73,那一个新闻是在hg19.chrom_24.sizes那一个文件里部分:
# 查看hg19.chrom_24.sizes
cat hg19.chrom_24.sizes
去掉每行开端4个字符
cut -c 4- test.csv
第四列已经替换为了呼应染色体长度。
对文本首先列实行总括
awk -F "," '{count[$1] } END{for (record in count) print record,count[record] }' test.csv #count[$1] 创建关联数组count[$1]并进行计数
代码及注释如下:
awk 'BEGIN{OFS="t"}{
# 在按行读第一个文件时将第二列数据存储到以第一列染色体名为下标的数组a里:
if(NR==FNR){
a[$1]=$2
}
# 读第二个文件,注意其中的a[$1]已经是a.bed中的$1.
if(NR>FNR){
print $1,$2,$3,a[$1],$5,$6
}
}' hg19.chrom_24.sizes a.bed >b.bed
对文件第四列用":"切割成两列并将最后一列结果 1,然后输出全体列
awk -F "," '{split($4,array,":");print $1,$2,$3,array[1],array[2] 1}' test.csv #split切割$4存到数组array中,array[1]和arrya[2]即为切割后的两个区域
awk 中数组叫做关联数组(associative arrays),因为下标能够是数字也能够是字符串。awk 中的数组不必提前申明,也没有须求表明大小,直接赋值就能够。
对文件第二列和第三列进行拓宽
进展前四列
张开后产生三列
awk -F "," '{for (i=$2;i<=$3;i ) {print $1,i,$4}}' test.csv
某意气风发行插入其余二个文书的剧情
sed '2 r a.txt' test.csv
把当前文件夹的公文名用","连接成黄金时代行,或许将多行转换为意气风发行
ls | paste -s -d "," # -s 选项将输入进行一次性粘贴
ls | xargs | sed 's/ /,/g' #xargs 将输入作为参数(空格分隔)传入
ls | awk '{printf "%s,",$0}'
对文本第二列求均值
awk -F "," '{sum =$2} END {print "Average = ", sum/NR}' test.csv
出口文件奇数行和偶数行
sed -n 'p;n' test.txt #输出奇数行
sed -n 'n;p' test.txt #输出偶数行
对文件依照标记在那从前的行开展分割
比如
awk '/>chr/{split($0,array,">");out=array[2]};{print > out}' test.fa
出口chr1,chr2七个文本
统计GC含量
echo "TTCCTTGAAATAAGTGTGATT" | awk '{s=gsub("[GC]","N",$0);print s/length}'
去除windows换行符
cat test.txt | sed 's/r//g'
本文由时时app平台注册网站发布于时时app平台注册网站,转载请注明出处:#基因组干货#生物信息学文本处理大杂烩(三)
关键词: