Объяснение хотел? Выбор 1000 элементов из большого массива? - PullRequest
1 голос
/ 26 февраля 2020

У меня есть 2987 файлов, которые мне нужно обрабатывать партиями по 1000 файлов (наш планировщик SLURM не любит больше этого). Теперь у меня есть следующий bash код:

# collecting all the dataset files into an array called FILES
FILES=($(ls *.fast5))
echo ${#FILES[@]}

# select only the first 1000 items in the array
SUBSET=(${FILES[@]:0:1000})  #selecting elements 0 to 1000 --> 1000 elements
SUBSET=(${FILES[@]:1000:2000}) #selecting elements 1000 to 2000  --> 1987 elements
SUBSET=(${FILES[@]:2000:2987}) #selecting elements 2000 to 2987 --> 987 elements

#determine length of array Subset
echo ${#SUBSET[@]}

## determine which dataset to analyze
MYFILE=${SUBSET[$SLURM_ARRAY_TASK_ID]}  ## identify which dataset is analyzed

## starting analysis
echo current dataset is: $MYFILE

Теперь моя проблема в том, что выбор элементов с 1000 по 2000 дает мне массив длиной 1987. Я понятия не имею, почему это так, или что не так в моем коде, почему я получаю массив, который длиннее 1000 элементов.

любые предложения, указатели и т. д. c приветствуются.

1 Ответ

4 голосов
/ 26 февраля 2020

Последний параметр подвыборки - это не число, на котором нужно останавливаться, а число результатов, на которые нужно ограничиться. Вы запрашиваете 2000 результатов, начиная с 1000, а не между 1000 и 2000.

SUBSET=(${FILES[@]:0:1000})  #selecting elements 0 to 999
SUBSET=(${FILES[@]:1000:1000}) #selecting elements 1000 to 1999
SUBSET=(${FILES[@]:2000:1000}) #selecting elements 2000 to 2999
...