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

関連する問題