2016-03-23 99 views
0

我正在使用awk拆分文件,其中有三個由空格分隔的split:1.起始點; 2.終點; 3.標籤在bash中按時間間隔標記時間戳

我想在定義的幀中創建新的標籤,這需要一個如果哪個是我有點卡住。

我期待這樣的事情:

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 
+0

你想將所有當前的數字四捨五入到可以被「2500000」整除的最接近的數字,然後將每個範圍分塊爲該大小的單位? –

回答

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" 
     } 
    } 
}' 
+0

這是steller!我花了一點時間去理解它在做什麼,但這正是我想要做的!謝謝! – badner