0

このような6列のデータがあります

LINES XY1  XY2  XY3  XY4  XY5
P1    Z/Z  T/T  -/-  T/T  T/T
P2    A/A  A/A  G/G  Z/Z  T/T
1     G/G  T/T  G/G  T/T  G/G
2     T/T  A/A  C/C  C/C  T/T
3     T/T  G/G  T/T  G/G  T/T
4     A/A  C/C  A/A  A/A  A/A
5     A/A  A/A  T/T  T/T  A/A
  1. 行とでどの列 ( からXY1までXY5) が異なるかを調べたいと思います。等しいとは、とが同じ文字 (対立遺伝子) を含むか、どちらかがまたはであることを意味します。P1P2P1P2Z/Z-/-

  2. 1行から列まで5P2列全体から までの列XY1を比較しますXY5。出力に一致する場合は、otherwise を含める必要があり1ます0。これを続けて、私のプログラムは 2 番目の一連のP1andP2行に遭遇します。

  3. と の間で異なる列のみ1を含む行の行合計を計算します。5P1P2

  4. と の間で異なる列の数で合計を割ることにより1、行の行の割合を計算します。5P1P2

私はこのような出力を期待しています

LINES XY1  XY2  XY3  XY4  XY5       
P1    eq   nq   eq   eq   eq   SUM  %
P2                                  1   
1     0    0    1    0    0    0    0
2     0    1    0    0    1    1    100
3     0    0    0    0    1    0    0
4     1    0    0    0    0    0    0
5     1    1    0    0    0    1    100

5,000 行を超えるデータがあり、現在、さまざまな数式を使用して Excel 2010 で作業していますが、多くのエネルギーを消費しています。

私はこの Perl をやりたいのですが、私は Perl の初心者です。ファイルを画面に読み込むことに成功しました。

ファイル読み込み部分まで書いたコードがこちら。

#!/usr/bin/perl
use strict;
use warnings;

use Text::CSV;

my $file = 'csv.csv';

my $csv = Text::CSV->new();

open(CSV, "<", $file) or die $!;

while (<CSV>) {
  if ($csv->parse($_)) {
    my @columns = $csv->fields();
    print "@columns\n";
  }
  else {
    my $err = $csv->error_input;
    print "Failed to parse line: $err";
  }
}

close CSV;
4

1 に答える 1