2013-07-08 46 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 

輸出應該結束這樣看,每個審判是一個行與指定的樣本數量:

' 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' 

添加這樣的事情只是截斷1500米的樣品,而不是每次試驗中:

'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

實質上,它將產生一個文件,其中包含消息代碼和連續每行的平均瞳孔直徑。行的長度不相等,因此我需要截斷它們,因此所有三個試驗的平均直徑均爲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循環。因此,例如,我只希望輸出包含20個數據點而不是35個。 –

+0

您可以包含計數器,請參閱我的編輯。 – Endoro

+0

以上只是實際數據的一小部分。在實際數據集中,我有三個試驗,每個試驗有1500多個觀測值。我是否可以包含如下內容:counter <= 1500截斷所有試驗? –