首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作shell脚本

问操作shell脚本
EN

Unix & Linux用户
提问于 2019-09-11 16:03:24
回答 1查看 55关注 0票数 1

我有一个shell脚本,它做一些事情,比如在变量中存储值。举个例子,这里是我的脚本:

代码语言:javascript
复制
for i in ../../*.bam
do
        fn=$(basename $i)
        fn=${fn%_Aligned.sortedByCoord.out.bam}

        bamToBed -i $i | awk -v OFS="\t" '{if($6 ~ /+/){print $1,$2+67,$2+67+1,$4,$5,$6}else{print $1,$3-67-1,$3-67,$4,$5,$6}}' | awk -v OFS="\t" '$3 > 0' > ${fn}_pos.bed

        sortBed -g $genome -i ${fn}_pos.bed > ${fn}_n_pos.bed

        mv ${fn}_n_pos.bed ${fn}_pos.bed

        perl counter.pl ${fn}_pos.bed | sortBed -g $genome -i stdin | intersectBed -g $genome -sorted -a <(cat $genome | awk -v OFS="\t" '{print $1,"0",$2}') -b stdin -wa -wb | cut -f 4-7 > ${fn}.bedGraph

        bedGraphToBigWig ${fn}.bedGraph $genome ${fn}.bw

        a=`samtools view $i | wc -l`

        intersectBed -g $genome -sorted -c -a <(cat test.bed | awk -v OFS="\t" '{print $1,$2-50,$2+400,$4,$5,$6}') -b ${fn}_pos.bed | cut -f 4,7 | awk -v OFS="\t" '{print $1,$2,$a}'> ${fn}_IP_count.txt

        cat ${fn}_IP_count.txt | awk -v OFS="\t" '{print $1,$2,$a}' > final.txt
done

正如您在代码中看到的那样,我已经声明了一个变量a。这有一个数字。然后,我创建了一个2列文本文件(选项卡分隔的${fn}_IP_count.txt )--我想在这个文件中添加第三列,其中第三列是存储在变量a中的值。例如,2列文件如下所示:

代码语言:javascript
复制
gene1   200
gene2   23
gene3   45
gene4   10

假设变量a中存储的值为245676,那么我希望输出存储在第三列中,如下所示

代码语言:javascript
复制
gene1   200 245676
gene2   23  245676
gene3   45  245676
gene4   10  245676

我试过使用awk,但我没有得到正确的答案。任何帮助都将不胜感激。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-09-11 16:06:51

使用OFS传递其他变量的方式与传递-v的方式相同

例如。

代码语言:javascript
复制
awk -v OFS="\t" -v a="$a" '{print $1,$2,a}'
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/541214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档