
Я хотел бы экспортировать значения данных, сгенерированные на терминале, в файл CSV. Ниже приведен вывод, который я получаю после выполнения инструкции в Freesurfer.
dev@dev-OptiPlex-780:~$ mri_segstats --subject Sub1 --etiv-only
$Id: mri_segstats.c,v 1.75.2.9 2013/02/16 00:09:33 greve Exp $
cwd
cmdline mri_segstats --subject Sub1 --etiv-only
sysname Linux
hostname dev-OptiPlex-780
machine x86_64
user dev
UseRobust 0
atlas_icv (eTIV) = 1144730 mm^3 (det: 1.701803 )
Из приведенного выше вывода я хотел бы извлечь только значение atlas_ICV(eTIV) (т.е. = 1144730 мм^3) в CSV-файл с помощью скрипта bash. Буду весьма признателен за любые предложения.
Я написал автоматизированный код для извлечения значения ICV для 10 субъектов, которые есть в моем каталоге.
for ICV in `cat list_subjects.txt`;do
#mri_segstats --subject $ICV --etiv-only
ICV_Calculation=mri_segstats --subject $ICV --etiv-only | sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p'
echo "${Subjects_ICV},${ICV_Calculation}" >>Subjects_ICV.csv
done
где list_subjects.txt включает все предметы, которые есть в моем каталоге
решение1
Я хотел бы извлечь только значение
atlas_ICV (eTIV)
(т.е. =1144730 mm^3
)
Учитывая этот файл:
: mri_segstats.c,v 1.75.2.9 2013/02/16 00:09:33 greve Exp $
cwd
cmdline mri_segstats --subject Sub1 --etiv-only
sysname Linux
hostname dev-OptiPlex-780
machine x86_64
user dev
UseRobust 0
atlas_icv (eTIV) = 1144730 mm^3 (det: 1.701803 )
Я могу использовать это sed
:
sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p' atlas
1144730 mm^3
Если вы хотите извлечь это значение из выходных данных в STDOUT
, просто используйте конвейер, например так:
cat atlas | sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p'
1144730 mm^3
В вашем случае, я полагаю, это будет выглядеть так:
mri_segstats --subject Sub1 --etiv-only | sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p'
sed --version
sed (GNU sed) 4.2.2