윌리엄 Pursell의 대답은 훨씬 더 똑똑하다,하지만 내 솔직 초보자에서 나는 다음과 같은 노력 마음 전에 약간의 시간 : 당신이 포인트 N 부동 사용하려는 경우
#!/bin/bash
data="data.dat"
datalength=`wc $data | awk '{print $1;}'`
for ((i=1; i<=$datalength; i++)) ;do
x=`cat $data | awk '{print $1;}' | sed -n "$i"p | sed -e 's/[eE]+*/\\*10\\^/'` ; x=`echo "$x" | bc -l` ; echo "x$i=$x";
y=`cat $data | awk '{print $2;}' | sed -n "$i"p | sed -e 's/[eE]+*/\\*10\\^/'` ; y=`echo "$y" | bc -l` ; echo "y$i=$y";
z=`cat $data | awk '{print $3;}' | sed -n "$i"p | sed -e 's/[eE]+*/\\*10\\^/'` ; z=`echo "$z" | bc -l` ; echo "z$i=$z";
# do something with xyz:
fslmaths ~/data/standard/MNI152_T1_2mm -mul 0 -add 1 -roi $x 1 $y 1 $z 1 0 1 point -odt float > NewFile$i
done
bc
과 sed -e 's/[eE]+*/\\*10\\^/'
추가 할 필요가 숫자가 지수 표기법을 사용하는 경우에도 마찬가지입니다.
나는 비슷한 문제가 있었지만 입력 데이터가 많을 경우 배쉬 스크립트는 매우 느립니다. 나는 perl로 옮겼다. 펄에서는 다음과 같이 보일 것입니다 :
#!/usr/bin/perl -w
use strict;
open (IN, "data.dat") or die "Error opening";
my $i=0;
for my $line (<IN>){
$i++;
open(OUT, ">NewFile$i.out");
chomp $line;
(my $x,my $y,my $z) = split '\t',$line;
print "$x $y $z\n";
# do something with xyz:
my $f= fslmaths ~/data/standard/MNI152_T1_2mm -mul 0 -add 1 -roi $x 1 $y 1 $z 1 0 1 point -odt float
print OUT "f= $f\n";
close OUT;
}
close IN;
당신이 무엇을 하려는지 올바른 방법 일 가능성은 희박합니다. 3 가지 가치로 무엇을하는지에 관해 더 자세히 이야기하면 올바른 접근 방식을 제안 할 수 있습니다. –
안녕하세요 Ed - 3 개의 값은 두뇌의 단일 복셀 위치에 대한 xyz 좌표입니다. 각 행은 복셀의 위치입니다. 이것은 내 입력 파일입니다. 3 입력 (xyz) 걸리고 입력 좌표 주위에 6mm 구를 만드는 기존 함수가 있습니다. 각 열의 값을 가져 와서 관심있는 함수에 입력하고 다음 행 (행)으로 이동하여 세 값을 입력하는 등의 작업을 수행하고 싶습니다.이 작업이 도움이되기를 바랍니다. 귀하의 의견을 보내 주셔서 감사합니다! – SteffieT
예를 들어 첫 번째 행은 57 14 30입니다 (머리글 없음, 각 값은 탭으로 구분됨). 이 숫자 각각에 X, Y, Z 변수로 라벨을 붙이고 $ X $ Y $ Z를 사용하여 다른 함수에 입력하고 싶습니다. 그런 다음, 다음 행으로 이동하여 동일하게 반복하고 싶습니다. – SteffieT