2016-06-13 6 views
1

似たような名前パターンを持つ100個のファイルがペアになっています。つまり、ファイル名は "A0-B1.fastq.0.1.82.fastq" & "A0-B2 .fastq.0.1.82.fastq "であり、ここでB0およびB1は2つの異なる対を示す。ファイル名中の「82」は乱数を表す。ディレクトリには82から100の範囲の乱数を持つファイルがあります。したがって、すべての乱数に対して、2組のファイル(A0-B1とA0-B2)があります。 それぞれの乱数ごとに両方のペアをマージしたいと思います。ここでファイル名を反復処理し、パターンに従ってマージします。

は、私が試したものです:

INPUT=`ls A0-*.0.1.*.fastq` 

#set values for pair and random 
p=`seq 1 1 2` 
r=`seq 82 2 100` 

for r in $INPUT; 
do 
cat A0-${p}.fastq.0.1.${r}.fastq > A0.merged.${r}.fastq 
done 

は、私が正しい出力を得るために何をしないのです??

答えて

0

あなたはこのスクリプトを使用することができます -

for i in {82..100..2} 
do 
    if ls A0-*.fastq.0.1.${i}.fastq 1> /dev/null 2>&1; then 
     cat A0-*.fastq.0.1.${i}.fastq > A0.merged.${i}.fastq 
    fi 
done 
+0

@anishsane 'テスト-f'があれば、多重パスを失敗する可能性があり、その場合にはグロブが、そこにある場合を除き名前が拡張されます。 'test -f *'を試してみてください – andlrc

+0

OK ...実際OPのスクリプトを見て、私はOPに値1と2を取る$ pを持つファイル名が固定されていると思ったので、globは必要ありません。しかし、正しいですが、-fはグロブに使用されると失敗します。 – anishsane

+0

助けてくれてありがとう。それは完全に働いた。 – RonnB

2

これはあなたのために働く必要があります。

for r in {82..100}; do 
    if [[ -f A0-B1.fastq.0.1.${r}.fastq ]] && [[ -f A0-B2.fastq.0.1.${r}.fastq ]]; then 
    cat A0-B1.fastq.O.1.${r}.fastq A0-B2.fastq.O.1.${r}.fastq > A0.merged.${r}.fastq 
    fi 
done