【问题标题】:How can I sort data every n-th line in linux?如何在linux中每第n行对数据进行排序?
【发布时间】:2014-12-07 07:23:54
【问题描述】:

我有以下数据。

 ...
 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 和 sort of linux 来执行此操作,以使用第 m 列值对每 n 行进行排序吗?我知道 'sort -nk m file > output' 可以进行排序,但我怎样才能对每第 n 行执行此操作?我需要使用 for 循环吗?


已解决

我从https://unix.stackexchange.com/questions/99582/sorting-blocks-of-lines 找到了答案。我什至不需要使用 for 循环,使用 AWK 命令来执行此操作。

【问题讨论】:

  • 是的。如需更多帮助,请发布一个简短的示例,例如,9 个输入行,每行 3 列,并以 3 行为一组进行排序。显示给定输入的预期输出。

标签: linux sorting awk sed


【解决方案1】:

这可能对你有用(GNU sed):

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

每 1000 行收集一次,然后对它们进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多