2012-06-14 26 views
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這樣的:

file3應包含:

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

file3第一列(SNPIDs)將是固定的(在我的芯片所有的SNP將在這裏列出),我想寫一個長期計劃,使其匹配SNP號file3file2,並將獲取相應snp id的P值,並將其從file2置於file3中。

file4應包含以下內容:

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

file4的第1列(SNPIDs)將是固定的(在我的芯片的SNP將在這裏列出),我想編寫一個程序,使其匹配file4file2中的SNP ID並且將獲取該相應SNP ID的BETA並將其從從file2中提取。

+2

我很抱歉,我並不清楚地瞭解你的問題。你能澄清一下嗎?我知道file1和file2被給出,並且file3和file4將被生成。如果是這樣,那麼file3中的值0.9263是從哪裏來的?我無法在file1或file2中的任何位置找到它。 – Balint

+0

另外,你的問題是什麼? – Graham

+0

嗨!讓我們用這種方式來說這個問題:file3是一個名爲「SNP」id的id列表,現在來自file2我想匹配file3中的「SNP」列表,並將相應的「P」值從file2打印到file3(前面的匹配ID)。對file4使用file2中的「BETA」值也是同樣的練習 –

回答

0

這是一個簡單的練習大約How to transfer the data of columns to rows (with awk)?

文件2至FILE3。

我認爲你有大內存的機器,因爲我認爲你有多少行到file2。

,你可以將這段代碼保存到文件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列(p值)。 現在你可以運行腳本:

/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名),搜索$ s到file2並創建關於每個snp名稱的小文件。 ,然後使用awk腳本生成file3。

file2到file4。

,你可以修改有關VAL值進入awk腳本從塔12中7

相關問題