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
はい
printf
insideを使用して出力形式を制御することもできます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