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 }