0

ファイルのリストをループして、その数に応じて操作を適用しようとしています。最初にlsコマンドを使用してみましたが、出力はリストではありません:

data="data2/Scerevisiae-Pho4/"
results="results3/"
samples=( "GSM730517" "GSM730528" )

if [ ! -d $results ]
then
    mkdir $results
fi
for sam in ${samples[@]}
do
    if [ ! -d $results$sam ]
    then
        mkdir $results$sam
    fi
    echo -e "Reading $sam directory $data$sam... \n"
    files=$(ls $data$sam)
    echo ${files[0]}
done

出力

echo ${files[@]}
    SRR217304.sra SRR217305.sra
echo ${files[0]}
    SRR217304.sra SRR217305.sra

私はこの別の構文を試しました:

files=($data$sam/*)

ローカルでは問題なく動作しましたが、これをシェル コードとしてスネークメイクワークフローに使用すると、構文エラーがスローされます。

syntax error near unexpected token `('

bashインタープリターに問題があると思いますか?これらのファイルを他にどのようにループできるか手がかりはありますか?

ありがとう

編集:私も試しました

 files=$data$sam/* 

出力する

echo ${files[0]}
data2/Scerevisiae-Pho4/GSM730517/*
4

1 に答える 1

1

これらすべてのチェックは必要ありません。mkdir -pまだ存在しない場合は、ディレクトリ パスを作成するために使用できます。また、配列をまったく使用する必要はありません

for d in GSM730517 GSM730528;
do p=results3/$d; 
  mkdir -p $p;
  for f in $p/*; 
  do echo $f; 
  done;
done;

既存のすべてのファイルを反復処理する必要がある場合は、echo を呼び出しに置き換えます。

于 2015-08-31T15:32:40.027 に答える