我有以下数据。
...
4080 2 2 3236 4079 0 0.869 0.872 1.863 2.000 -0.720
3654 2 2 3653 3655 0 0.864 0.873 1.798 2.000 -0.676
3653 1 1 3654 0 0.864 0.977 0.000 0.422
3655 1 1 3654 0 0.873 0.895 0.000 0.404
...
数据总共有100000000行,由100000个数据块组成,每个数据块每行有1000行。
我希望对数据块中的数据进行排序,这意味着每1000行排序一次。按照第一列值排序1~1000,1001~2000 ......就像这样。喜欢
...
1 4 4 263 704 952 244 0 0.951 0.941 0.928 0.936 3.836 0.000 1.668
2 4 4 33 215 305 172 0 0.937 0.942 0.945 0.924 3.815 0.000 1.574
3 4 4 279 344 377 1945 0 0.928 0.934 0.938 0.920 3.830 0.000 1.502
...
我可以用awk,sed和linux这样做,使用第m列值对每个第n行进行排序吗?我知道'sort -nk m file>输出'可以进行排序,但我怎样才能为每个第n行做这个?我应该使用for循环吗?
我从https://unix.stackexchange.com/questions/99582/sorting-blocks-of-lines找到答案。我甚至不需要使用for循环,使用AWK命令来执行此操作。
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed ':a;$!N;s/\n/&/1000;Ta;s/.*/echo "&" | sort/e' file
这会收集每1000行,然后对它们进行排序。