截断试验

时间:2013-07-08 04:37:29

标签: awk

我需要一些帮助。我有一个数据文件(试验主题),有三个试验,每个试验有大约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++
}
}

}

1 个答案:

答案 0 :(得分: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++
    }