【问题标题】:create file by feching corresponding data from other files?通过从其他文件中获取相应数据来创建文件?
【发布时间】:2012-06-14 14:56:56
【问题描述】:

例如,我有一个 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

我有另一个 SNP 列表,其中包含不同表型的相应 P 值 (P) 和 BETA(如下所示),我只展示了一个(我们称之为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

现在我想创建两个名为 file3file4 的文件,这样:

file3 应包含:

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

file3 中的第一列 (SNPIDs) 将被修复(我的芯片中的所有 snps 都将在此处列出),我想编写一个程序以便它匹配file3 和 @987654331 中的 snp id @ 并将获取相应 snp id 的 P 值并将其放入来自 file2 的 file3 中。

file4 应包含:

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

file4 中的第一列 (SNPIDs) 将被修复(我的芯片中的所有 SNP 都将在此处列出),我想编写一个程序使其匹配 file4 和 @987654337 中的 SNP ID @ 并将获取相应 SNP ID 的 BETA 并将其放入来自 file2file4

【问题讨论】:

  • 对不起,我不太清楚你的问题。你能澄清一下吗?我知道给出了 file1 和 file2 并且要生成 file3 和 file4。如果是这样,例如 file3 中的值 0.9263 来自哪里?我在 file1 或 file2 的任何地方都找不到它。
  • 另外,你有什么问题??
  • 嗨!让我们这样说问题:file3 是一些名为“SNP”id 的 id 列表,现在从 file2 我想匹配 file3 中的“SNP”列表并将相应的“P”值从 file2 打印到 file3(前面的匹配 ID)。使用 file2 中的“BETA”值对 file4 进行同样的练习

标签: sed awk


【解决方案1】:

这是一个关于How to transfer the data of columns to rows (with awk)?的简单练习

file2 到 file3。

我假设您的机器具有大 RAM,因为我认为您在 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 列(pvalue)。 现在你可以运行脚本了:

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

如果你的内存很小,那么你可以划分负载:

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 的值从第 12 列修改为 awk 脚本到第 7 列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2017-05-10
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多