如何在linux中每隔n行对数据进行排序?

时间:2014-10-12 17:31:08

标签: linux sorting awk sed

我有以下数据。

 ...
 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命令来执行此操作。

1 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed ':a;$!N;s/\n/&/1000;Ta;s/.*/echo "&" | sort/e' file

这会收集每1000行,然后对它们进行排序。