将数据排序为块

时间:2013-08-05 13:15:55

标签: bash sorting

我是编程的初学者,所以这个问题可能很简单。

我想来自:

1   sth
2   sth
3   sth
4   sth
3   sth
2   sth
2   sth

要:

1 sth

2 sth
2 sth 
2 sth

3 sth
3 sth

4 sth

这是热图的gnuplot所需的格式。我知道你可以使用sort -n "datafile"按行中的第一个数字对数据进行排序,但是如何将所有内容拆分成块?感谢。

2 个答案:

答案 0 :(得分:4)

这种做法:

$ sort -n file | awk '{if (a!=$1) {print ""} a=$1}1'

1   sth

2   sth
2   sth
2   sth

3   sth
3   sth

4   sth

解释

  • sort -n file很明显,因为您已经使用过它。
  • awk '{if (a!=$1) {print ""} a=$1}1'
    • 只要一行的第一个字段和下一个字段不同,就打印一个新行。
    • 这是通过在变量$1中保存第一个字段值(a)来实现的。
    • {}1条件打印每一行。

答案 1 :(得分:2)

Perl解决方案:

sort -n datafile | perl -ape 'print "\n" if defined $previous and $F[0] != $previous; $previous = $F[0]'