在bash中按间隔标记时间戳

时间:2016-03-23 12:18:45

标签: bash awk

我使用awk分割文件,其中我有三个以空格分隔的分割:1。起始点;结束点; 3.标签

我想在定义的帧中创建新标签,这需要一个if,这是我有点卡住的地方。

我正在寻找类似的东西:

num_intervals == (tail -1 | ending point)/250000
count == 1
interval == 2500000
current_interval_start == 0
current_interval_end == current_interval_start + interval
for interval in num_intervals
    if starting_point >= current_interval_start and if ending_point <= current_interval_end then
        print count + label
        count == count + 1
        current_interval_start == current_interval_end
        current_interval_end == current_interval_start + interval

*观察两个标签是否处于相同的间隔范围内,取第一个,但我可以对此进行处理。

我的数据如下:

0 2300000 null
2300000 4300000 h
4300000 8000000 aa
8000000 11500000 t
11500000 28400001 null

我希望输出的是:

0 2500000 null
2500000 5000000 h
5000000 7500000 aa
7500000 1000000 aa
1000000 1250000 t
1250000 1500000 null
1500000 1750000 null
1750000 2000000 null
2000000 2250000 null
2500000 2750000 null
2750000 3000000 null

1 个答案:

答案 0 :(得分:1)

你只能用awk:

 awk  -v s=2500000 '{
    f=int($1/s);
    l=int($2/s);
    if((l-f) > 0){
         for(i=f+1;i<=l;i++){
               a[i]=$3
         }
    }
}
END {
    e=int($2/s);
    for (i=0;i<=e;i++){
         if (i in a ){
              print i*s,(i+1)*s,a[i]
         }
         else{
              print i*s,(i+1)*s,"null"
         }
    }
}'