2016-07-07 128 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。 –