2013-07-08 1 views
-1

약간의 도움이 필요합니다. 데이터 파일 (파일럿 피사체)에 약 1500 개의 데이터 포인트가있는 세 번의 실험이 있습니다. 각 시험은 1500 데이터 포인트로 절단해야합니다. 나는 아래의 데이터 파일 샘플뿐만 아니라 사용하고있는 코드를 포함하고있다. 어떤 도움이라도 대단히 감사하겠습니다.트라이얼 트라이얼

`BEGIN{ SKIP=0} 
{ 
if ($1=="MSG" && SKIP==0) 
{ 
    FS=" " 
    printf("\n%s",$6) 
    SKIP=1; 
} 
else if ($1=="MSG" && SKIP==1) 
{ 
    FS=" " 
    printf(" %d",$6) 
    SKIP=0; 
} 
else 

    FS="\t" 
    printf(" %.2f",($3+$4)/2) 

} 
} 


`MSG 1 # Message: bince.bmp     
MSG 1 # Message: 103    
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 0 0 0 0 0 
SMP 1 10.44 10.44 11.26 11.26 0 
SMP 1 10.19 10.19 11.03 11.03 0 
SMP 1 10.09 10.09 11.23 11.23 0 
SMP 1 10.24 10.24 11.03 11.03 0 
SMP 1 10.09 10.09 11.3 11.3 0 
SMP 1 10.27 10.27 11.16 11.16 0 
SMP 1 10.02 10.02 11.22 11.22 0 
SMP 1 10.01 10.01 11.16 11.16 0 
SMP 1 10.28 10.28 11.16 11.16 0 
SMP 1 10.22 10.22 11.3 11.3 0 
SMP 1 10.18 10.18 11.25 11.25 0 
SMP 1 10.37 10.37 11.26 11.26 0 
SMP 1 10.54 10.54 11.22 11.22 0 
SMP 1 10.19 10.19 11.26 11.26 0 
SMP 1 10.39 10.39 11.27 11.27 0 

출력은 각 시험 샘플의 지정된 번호를 하나의 행되는으로,이처럼 보이는 결국해야한다 :이 그냥 각 시험에서 1500 개 샘플을 잘라 같은 것을 추가

' 101 0.00 0.00 0.00...10.23 10.23 12.12 12.12 
    103 0.00 0.00 0.00...10.23 10.23 12.12 12.12 
    104 0.00 0.00 0.00...10.23 10.23 12.12 12.12' 

:

'BEGIN{ SKIP=0; counter=0} 
{ 
if ($1=="MSG" && SKIP==0) 
{ 
    FS=" " 
    printf("\n%s",$5) 
    SKIP=1; 
} 
else if ($1=="MSG" && SKIP==1) 
{ 
    FS=" " 
    printf(" %d",$6) 
    SKIP=0; 
} 
else if ($1!="MSG" && counter <=1500) { 
{ 
    FS="\t" 
    printf(" %.2f",($4+$5)/2) 
    counter++ 
} 
} 

} 
+0

4 개의 열을 볼 수 있으며 유효한 데이터 요소가 무엇인지 알 수 없습니까? – Endoro

+0

$ 3 및 $ 4는 왼쪽 눈의 수직 및 수평 동공 직경입니다. 그것들은 평균화되어 하나의 데이터 포인트를 생성합니다. 위의 데이터는 예제 일뿐입니다. –

+0

본질적으로 메시지 코드와 행의 각 줄에 대한 평균 동공 지름을 가진 파일을 생성합니다. 행의 길이가 같지 않으므로 3 개의 모든 시도에 평균 1500 개의 직경이 있으므로 행을 잘라야합니다. –

답변

1

나는 당신의 요구에 대해 지금까지 확실하지 않다, 그러나 이것은 어쩌면 시작 지점입니다 :

$1=="MSG" { 
    if ($5 ~ /[0-9]+/){ 
     counter=0 
     } 
    printf("\n%s",$5) 
    } 
($1!="MSG") && ($3!=0) && (counter <= 10) { 
    printf("\n %.2f",($3+$4)/2) 
    counter++ 
    } 
+0

평균 크기의 부분 집합을 취하는 for 루프를 작성하는 방법을 알고 싶습니다. 예를 들어 출력에 35 대신 20 개의 데이터 포인트 만 포함 시키길 원합니다. –

+0

카운터를 포함 할 수 있습니다. 제 편집을 참조하십시오. – Endoro

+0

위의 내용은 실제 데이터의 작은 샘플입니다. 실제 데이터 세트에는 1500 회의 관측치가있는 각각 3 회의 재판이 있습니다. 다음과 같은 내용을 포함시킬 수 있습니까? counter = 1500? 모든 시도를 잘라내시겠습니까? –

관련 문제