10477777 发表于 2015-12-28 15:48:43

perl、shell格式化文本(70字符每行转6列每列10字符)

  如果我想对一个每行70个字符的文本处理,让它生成每列10个字符,每行6列,并输出字符数怎么弄呀?
如:





[*]TINHTFGNPVIPFKDGIYFAATEKSNVVRGWVFGSTMNNKSQSVIIINNSTNVVIRACNFELCDNPFFAV
[*]SKPMGTQTHTMIFDNAFNCTFEYISDAFSLDVSEKSGNFKHLREFVFKNKDGFLYVYKGYQPIDVVRDLP
  
生成:





[*]1      TINHTFGNPV      IPFKDGIYFA      ATEKSNVVRG      WVFGSTMNNK      SQSVIIINNS       TNVVIRACNF
[*]61      ELCDNPFFAV      SKPMGTQTHT      MIFDNAFNCT      FEYISDAFSL      DVSEKSGNFK       HLREFVFKNK
[*]121      DGFLYVYKGY      QPIDVVRDLP


----------------------------------------------------------------------------------




fold -w10 urfile |xargs -n6 |awk '{print (NR-1)*60+1,$0}'


1 #!/usr/bin/perl -w
2
3 my ( $column, $character ) = ( 5, 15 );    # ( 6, 10 )
4 my ( $num, $X, $data ) = ( 0, $column * $character );
5 while () { chomp; $data .= $_ }
6 my @split = $data =~ /(.{$character}|.+)/g;
7
8 while ( my @line = splice @split, 0, $column ) {
9   print join "\t", $num++ * $X + 1, @line;
10   print "\n";
11 }
12 ——————————————————————————————————————————
13 my $i = 0;
14 while () {
15   my @line = unpack "A10" x ( length($_) );
16   my @data;
17   for (@line) {
18         next unless $_;
19         print 1, "\t" if $i == 0;
20         $i += length($_);
21         print $_, "\t";
22         print "\n", $i + 1, "\t" if $i % 60 == 0;
23   }
24 }
  
页: [1]
查看完整版本: perl、shell格式化文本(70字符每行转6列每列10字符)