範囲に対応する数字を追加してください。

範囲に対応する数字を追加してください。

30000行のデータセットがあります。 0〜50(列2など)、50.1〜100、次に100.1〜150など(列1に示されている)の範囲のすべての対応する値を追加し、この順序は次の行の残りの部分に対して続きます。実行文書。

入力ファイル:

10         1
21.1       1
22         1
28         2
30         5
44.44      2
44.45      1
50         2
55         22
100.11     200
105        5
600.2      10
888        90

予想出力:

0          15
50         22
100        205
600        10
850        90

頑張った

awk     'NR==1          {printf "%s\t",$1; N=$1+49}
     $1>=N          {printf "%s\n%s\t",sum,N; N+=49; sum=0}
                    {sum+=$2}
     END            {printf "%s\n", sum}
    ' myfile

しかし、期待した結果は出ません。

ベストアンサー1

そして:

$ awk '
 {arr[int(($1%50?$1:($1-1))/50)]+=$2};
 END{for(k in arr){print k*50, arr[k]}}
' file.txt | sort -k1,1n

はい

printfinsideを使用して出力形式を制御することもできますawk

$ awk '
 {arr[int(($1%50?$1:($1-1))/50)]+=$2};
 END{for(k in arr){printf "%-11s%-5s\n", k*50, arr[k]}}
' file.txt | sort -k1,1n
0          15   
50         22   
100        205  
600        10   
850        90   

おすすめ記事