цикл для bash for данного массива учитывает только один файл из двух в массиве - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть массив из двух файлов из команды find:

[ogino@chead SIEMENS]$ DCM_FILES=($(find . -type f))

[ogino@chead SIEMENS]$ echo ${DCM_FILES[@]}
./107939/107939/DICOM/0020_20071002_104554.150005 ./100013/100013/DICOM/0002_20130723_100423.117500

Затем я построил цикл for, чтобы выгрузить информацию в файлы (через dcmdump изdcmtk Toolbox):

[ogino@chead SIEMENS]$ for dcm in "${DCM_FILES[@]}"
do
  sd=$(dcmdump ${dcm} | grep "(0008,1030)"); 
done

Однако, похоже, что он читает только один файл DICOM, как показано в моем выводе:

[ogino@chead SIEMENS]$ echo ${sd[0]}
(0008,1030) LO [RESEARCH^THOMPSON_SCHILL] # 24, 1 Unknown Tag & Data

[ogino@chead SIEMENS]$ echo ${sd[1]}

# I get a blank line for the second instance of my echo testing

[ogino@chead SIEMENS]$ echo ${sd[@]}
(0008,1030) LO [RESEARCH^THOMPSON_SCHILL] # 24, 1 Unknown Tag & Data

Я попытался инициировать пустой массив для sd до цикла, который не работал (sd=( )), и, что удивительно, индексирование с помощью dcm также, похоже, не подхватило второй файл ${sd[1]} ...

[ogino@chead SIEMENS]$ echo ${dcm[0]}
./100013/100013/DICOM/0002_20130723_100423.117500
[ogino@chead SIEMENS]$ echo ${dcm[1]}

[ogino@chead SIEMENS]$ echo ${dcm[@]}
./100013/100013/DICOM/0002_20130723_100423.117500

Удаление назначения переменной для переменной sd, похоже, устраняет ошибку, за исключением того, что мне нужно сохранить этот конкретный вывод где-то в массиве, поэтому я вначале установил для команды dcmdump значение sd.

[ogino@chead SIEMENS]$ for dcm in "${DCM_FILES[@]}"; do dcmdump ${dcm} | grep "(0008,1030)"; done
W: no data dictionary loaded, check environment variable: DCMDICTPATH
(0008,1030) LO [MRI BRAIN/MRHD]                         #  14, 1 Unknown Tag & Data
W: no data dictionary loaded, check environment variable: DCMDICTPATH
(0008,1030) LO [RESEARCH^THOMPSON_SCHILL]               #  24, 1 Unknown Tag & Data

Мне кажется, что поиск в Google намекает на то, что может быть проблема с grep, но сейчас мне это не так ясно.

Есть ли какая-то модификация, которую мне нужно внести в мой цикл, чтобы я мог сохранить оба экземпляра в массиве?Любая помощь, чтобы указать мне в правильном направлении, чтобы произвести вывод выше со вторым экземпляром grep

1 Ответ

1 голос
/ 25 сентября 2019

Как насчет итерации по индексам массива DCM_FILES вместо значений, так как вы хотите, чтобы индексы в любом случае совпадали в вашем новом массиве?

DCM_FILES=($(find . -type f))
for idx in $(seq ${#DCM_FILES[@]}) ; do
  sd[idx]=$(dcmdump ${DCM_FILES[idx]} | grep "(0008,1030)")
done
echo "${sd[@]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...