0

たとえば、SNP のリストがあります (これを と呼びましょうfile1):

SNP_ID      chr position   
rs9999847   4   182120631
rs999985    11  107192257
rs9999853   4   148436871
rs999986    14  95803856
rs9999883   4   870669
rs9999929   4   73470754
rs9999931   4   31676985
rs9999944   4   148376995
rs999995    10  78735498
rs9999963   4   84072737
rs9999966   4   5927355
rs9999979   4   135733891

異なる表現型に対応する P 値 (P) と BETA (以下に示す) を含む SNP の別のリストがありますfile2

CHR SNP         BP      A1 TEST NMISS   BETA    SE      L95     U95     STAT    P
1   rs3094315   742429  G   ADD 1123    0.1783  0.2441  -0.3    0.6566  0.7306  0.4652
1   rs12562034  758311  A   ADD 1119    -0.2096 0.2128  -0.6267 0.2075  -0.9848 0.3249
1   rs4475691   836671  A   ADD 1111    -0.006033 0.2314 -0.4595 0.4474 -0.02608 0.9792
1   rs9999847   878522  A   ADD 1109    -0.2784 0.4048  -1.072  0.5149  -0.6879 0.4916
1   rs999985    890368  C   ADD 1111    0.179   0.2166  -0.2455 0.6034  0.8265  0.4087
1   rs9999853   908247  C   ADD 1110    -0.02015 0.2073 -0.4265 0.3862  -0.09718 0.9226
1   rs999986    918699  G   ADD 1111    -1.248  0.7892  -2.795  0.2984  -1.582  0.114

file3ここで、file4などの名前の 2 つのファイルを作成します。

file3以下を含める必要があります。

SNPID    Pvalue_for_phenotype1   Pvalue_for_phenotype2   Pvalue_for_phenotype3 and so on....
rs9999847 0.9263                 0.00005                 0.002                ..............

の最初の列 (SNPID) は固定されます (チップ内のすべての snp がここにリストされます)。snp idと一致し、対応する snp の P 値をフェッチするfile3ようにプログラムを書きたいと思います。 id から file3 に入れます。file3file2file2

file4以下を含める必要があります。

SNPID    BETAvale_for_phenotype1     BETAvale_for_phenotype2     BETAvale_for_phenotype3 .........
rs9999847 0.01812                       -0.011                            0.22

の 1 列目 (SNPID) は固定されます (チップ内のすべての SNP がここにリストされます)。SNP ID と一致し、その対応する SNP ID の BETA をフェッチするようfile4にプログラムを書きたいと考えています。から入れます。file4file2file4file2

4

1 に答える 1

0

列のデータを行に転送する方法についての簡単な演習です(awkを使用)?

ファイル2からファイル3。

file2 に何百万行もあると思うので、大きな RAM を搭載したマシンを持っていると仮定しました。

このコードを column2row.awk ファイルに保存できます。

#!/usr/bin/awk -f                                                        

BEGIN {
    snp=2
    val=12
}

{
    if ( vector[$snp] )
        vector[$snp] = vector[$snp]","$val
    else
        vector[$snp] = $val
}

END {
    for (snp in vector)
        print snp","vector[snp]
}

ここで、snp は列 2 で、val は列 12 (pvalue) です。これでスクリプトを実行できます:

/usr/bin/awk -f column2row.awk file2 > file3

RAM が小さい場合は、負荷を分割できます。

cat file1 | while read l; do s=$(echo $l|awk '{print $1}'); grep -w $s file2 > $s.snp; /usr/bin/awk -f column2row.awk $s.snp >> file3; done

$l (行) の最初のパラメーター ($s、snp 名) から回復し、file2 内で $s を検索し、各 snp 名に関する小さなファイルを作成します。次に、awk スクリプトを使用して file3 を生成します。

file2 から file4 まで。

val に関する値を awk スクリプトの 12 列目から 7 列目に変更できます。

于 2012-07-16T21:08:27.920 に答える