변수에 값을 저장하는 것과 같은 작업을 수행하는 쉘 스크립트가 있습니다. 예를 들어, 이것은 내 스크립트입니다.
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}'