2016-07-07 165 views
0

我在for循环中执行一些任务,并尝试在每次迭代期间将stdout转换为变量文件名。但它给了我唯一一个文件的一部分文件分配。在bash中输出到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 

它是由在for循环的最后一行只给输出文件“E.txt”。我期待E003_file.txt和E004_file.txt。

我是新手请帮帮我。 谢谢

+0

http://stackoverflow.com/q/17622106/1030675 – choroba

回答

1

当你写

E$i_file.txt 

壳正在寻找一个名为i_file变量,因为_是在变量名中的合法字符,而不是分隔符。你需要使用大括号来分隔变量名:

bedtools intersect -v -a file1.bed -b file2.bed > "E${i}_file.txt" 
+0

非常感谢Barmar。 –