转置文本

1240阅读 0评论2013-12-11 yestreenstars
分类:LINUX

原帖:处理前:
BJ30 26
BJ30 24
BJ30 63
BJ30 70
SH41 21
SH41 30
SH41 25
SH41 25
SD15 34
SD15 46
SD15 20
SD15 34
TJ20 23
TJ20 32
TJ20 31
TJ20 35

处理后:
BJ30 SH41 SD15 TJ20
26 21 34 23
24 30 46 32
63 25 20 31
70 25 34 35

  1. awk '{if(!a[$1]++){x=1;y++}b[y]=$1;c[x,y]=$2;x++}END{for(i=1;i<=y;i++)s=s!=""?s OFS b[i]:b[i];print s;for(i=1;i

点击(此处)折叠或打开

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use 5.010;

  5. my ($x,$y) = (0,0);
  6. my (@arr1,@arr2);

  7. while (<DATA>) {
  8.         @_ = split;
  9.         if ( $arr1[$y] && $arr1[$y] ne $_[0] ) {
  10.                 $x=0;
  11.                 $y++;
  12.         }
  13.         $arr1[$y] = $_[0];
  14.         $arr2[$x][$y] = $_[1];
  15.         $x++;
  16. }

  17. END {
  18.         say join ' ', @arr1;
  19.         say join ' ', @{$arr2[$_]} for 0 .. $#arr1;
  20. }

  21. __DATA__
  22. BJ30 26
  23. BJ30 24
  24. BJ30 63
  25. BJ30 70
  26. SH41 21
  27. SH41 30
  28. SH41 25
  29. SH41 25
  30. SD15 34
  31. SD15 46
  32. SD15 20
  33. SD15 34
  34. TJ20 23
  35. TJ20 32
  36. TJ20 31
  37. TJ20 35

上一篇:showkey
下一篇:统计字母个数