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