작업 셸 스크립트

작업 셸 스크립트

변수에 값을 저장하는 것과 같은 작업을 수행하는 쉘 스크립트가 있습니다. 예를 들어, 이것은 내 스크립트입니다.

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열 파일은 다음과 같습니다.

gene1   200
gene2   23
gene3   45
gene4   10

변수 a에 저장된 값이 245676이라고 가정하면 출력이 다음과 같이 세 번째 열에 저장되기를 원합니다.

gene1   200 245676
gene2   23  245676
gene3   45  245676
gene4   10  245676

awk를 사용해 보았지만 정답을 얻지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

전달하는 것과 같은 방식으로 다른 변수를 전달합니다 OFS.-v

전임자.

awk -v OFS="\t" -v a="$a" '{print $1,$2,a}'

관련 정보