Nar*_* DJ 3 bash for-loop stdout
我正在 for 循环中执行一些任务,并尝试在每次迭代期间将标准输出到变量文件名。但它给了我唯一一个分配了部分文件的文件。
这是我的脚本:
#!/bin/sh
me1_dir="/Users/njayavel/Downloads/Silencer_project/roadmap_analysis/data/h3k4me1_data"
me3_dir="/Users/njayavel/Downloads/Silencer_project/roadmap_analysis/data/h3k4me3_data"
dnase_dir="/Users/njayavel/Downloads/Silencer_project/roadmap_analysis/data/dnase_data"
index=(003 004)
#index=(003 004 005 006 007 008 017 021 022 028 029 032 033 034 046 050 051 055 056 057 059 080 081 082 083 084 085 086 088 089 090 091 092 093 094 097 098 100 109)
#index=(006 007 008 017 021 022 028 029 032 033 034 046 050 051 055 056 057 059 080 081 082 083 084 085 086 088 089 090 091 092 093 094 097 098 100 109)
for i in "${index[@]}"; do
dnase_file="$dnase_dir/E$i-DNase.hotspot.fdr0.01.broad.bed"
me1_fil="$me1_dir/E$i-H3K4me1.broadPeak"
me3_fil="$me3_dir/E$i-H3K4me3.broadPeak"
awk 'BEGIN { OFS="\t"}; {print $1,$2,$3}' $me1_fil > me1_file.bed
awk 'BEGIN { OFS="\t"}; {print $1,$2,$3}' $me3_fil > me3_file.bed
ctcf_file="CTCFsites_hg19_sorted_bedmerged.bed"
tss_file="TSS_gene_2kbupstrm_0.5kbdownstrm.bed"
cat me1_file.bed me3_file.bed $ctcf_file $tss_file | sort -k1,1 -k2,2n > file2.bed
awk 'BEGIN { OFS="\t"}; {print $1,$2,$3}' $dnase_file | sort -k1,1 -k2,2n > file1.bed
bedtools intersect -v -a file1.bed -b file2.bed > E$i_file.txt;
done
Run Code Online (Sandbox Code Playgroud)
它只给出 for 循环最后一行的输出文件“E.txt”。我期待 E003_file.txt 和 E004_file.txt。
我是新手请帮帮我。谢谢
当你写
E$i_file.txt
Run Code Online (Sandbox Code Playgroud)
shell 正在寻找一个名为 的变量i_file,因为_是变量名中的有效字符,而不是分隔符。您需要使用大括号来分隔变量名称:
bedtools intersect -v -a file1.bed -b file2.bed > "E${i}_file.txt"
Run Code Online (Sandbox Code Playgroud)