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

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

  1. TINHTFGNPVIPFKDGIYFAATEKSNVVRGWVFGSTMNNKSQSVIIINNSTNVVIRACNFELCDNPFFAV
  2. SKPMGTQTHTMIFDNAFNCTFEYISDAFSLDVSEKSGNFKHLREFVFKNKDGFLYVYKGYQPIDVVRDLP

生成:

  1. 1        TINHTFGNPV        IPFKDGIYFA        ATEKSNVVRG        WVFGSTMNNK        SQSVIIINNS       TNVVIRACNF
  2. 61        ELCDNPFFAV        SKPMGTQTHT        MIFDNAFNCT        FEYISDAFSL        DVSEKSGNFK       HLREFVFKNK
  3. 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 }

 

posted on 2013-12-12 18:09  三川  阅读(812)  评论(0编辑  收藏  举报