1

我是编程初学者,所以这个问题可能是微不足道的。

我想从:

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",但是如何将所有内容分成块?谢谢。

4

2 回答 2

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条件打印每一行。
于 2013-08-05T13:19:54.400 回答
2

Perl 解决方案:

sort -n datafile | perl -ape 'print "\n" if defined $previous and $F[0] != $previous; $previous = $F[0]'
于 2013-08-05T13:19:00.613 回答