如何在外壳中合并具有不同行数的两个文件?

Dadong Zhang

我有这样的文件1:

CHR                     SNP     TEST   A1   A2                 GENO   O(HET)   E(HET)            P 
   0         AFFX-SNP-000541      ALL    0    0                0/0/0      nan      nan            1
   0         AFFX-SNP-000541      AFF    0    0                0/0/0      nan      nan           NA
   0         AFFX-SNP-000541    UNAFF    0    0                0/0/0      nan      nan           NA
   0         AFFX-SNP-002255      ALL    0    0                0/0/0      nan      nan            1
   0         AFFX-SNP-002255      AFF    0    0                0/0/0      nan      nan           NA
   0         AFFX-SNP-002255    UNAFF    0    0                0/0/0      nan      nan           NA
   1                 rs12103      ALL    C    T           55/250/317   0.4019   0.4113       0.5596
   1                 rs12103      AFF    C    T                0/0/0      nan      nan           NA
   1                 rs12103    UNAFF    C    T                0/0/0      nan      nan           NA
   1         rs12103_1247494      ALL    C    T           55/250/321   0.3994   0.4097       0.5581
   1         rs12103_1247494      AFF    C    T                0/0/0      nan      nan           NA
   1         rs12103_1247494    UNAFF    C    T                0/0/0      nan      nan           NA

和file2一样:

CHR                     SNP   A1   A2          MAF  NCHROBS
   0         AFFX-SNP-000541    0    0           NA        0
   0         AFFX-SNP-002255    0    0           NA        0
   1                 rs12103    C    T       0.2894     1244
   1         rs12103_1247494    C    T       0.2875     1252

我想基于SNP名称和TEST == ALL将file2与file1合并,并将CHR,SNP,P和MAF保留在输出file3中。有人知道在终端(Unix)Shell中实现此目标的最佳方法吗?

期望的输出将是:

  CHR                     SNP  MAF        P
   0         AFFX-SNP-000541   NA         1
   0         AFFX-SNP-002255   NA         1
   1                 rs12103   0.2894     0.5596
   1         rs12103_1247494   0.2875     0.5581
JPG格式

这个答案的帮助下

awk 'FNR==NR && FNR>1 {a[$2] = $5; next}
     FNR > 1 && ($2 in a) && $3 == "ALL" {
         print $1 "    " $2 "    "  a[$2] "    "  $9
     }' file2 file1

要获得标题,只需将其添加到脚本的开头:

 BEGIN{print "CHR SNP MAF P"}

解释:

首先,将两个文件传递给awk时,将一个接一个地处理它们。这里有两个重要的变量:NRawk命令开头FNR的行号,以及是当前文件开头的行号。也就是说,当第一文件进行处理(这里file2的),NR并且FNR具有相同的值,这是该行的当前处理的值。但是当awk传递到第二个文件时,FNR被重置为1,因此NRFNR不再相同。因此,该测试FNR==NR是了解所处理文件是否为第一个文件的技巧。

因此,让我们看一下代码。条件FNR==NR && FNR>1测试我们是否正在处理第一个文件而不是第一行。如果是这样,我们将第五列(MAF的值存储在由第二个(SNP索引的数组中,然后该next语句说传递给下一行。

当awk处理第二个文件(即file1)时,第一个测试为false,因此awk尝试第二个测试:FNR > 1 && ($2 in a) && $3 == "ALL",即:文件的第一行+表中的第二列值(SNP)不存在a+表中的第三列值(TEST)是"ALL"如果是这种情况,则将打印列1(CHR)和两(SNP),使用来MAF从数组中获取a[$2],然后打印列九(P)。

BEGIN{...}在开头添加一条语句会添加一条仅在处理第一行之前运行的命令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在外壳中合并具有不同行数的两个文件?

来自分类Dev

合并两个具有不同行数的矩阵

来自分类Dev

在R中将两个具有不同行数的数据帧合并

来自分类Dev

合并两个具有不同行数和列数的数据框

来自分类Dev

如何使用空行条件合并不同行数的两个文件?

来自分类Dev

使用Python Pandas比较具有不同行数的两个Excel文件

来自分类Dev

Python:如何添加两个具有不同行数的数据框

来自分类Dev

使用Pandas DataFrames比较具有不同标题但具有相同行数据的两个Excel文件

来自分类Dev

使用Pandas DataFrames比较具有不同标题但具有相同行数据的两个Excel文件

来自分类Dev

我如何在SSIS中合并两个平面文件具有不同的数据类型

来自分类Dev

如何在CSS中合并具有不同父元素的两个元素?

来自分类Dev

将具有不同行数的 2 个文本文件合并到 csv 文件中

来自分类Dev

如何在 group by 子句的帮助下在一个查询中获取两个不同表的不同行数

来自分类Dev

MySQL-并行合并具有相同行数的两个不相关的查询

来自分类Dev

如何在gnuplot中添加具有不同x基础的两个文件文件

来自分类Dev

对来自具有不同行数的两个表的数据求和

来自分类Dev

使用两个具有不同行数的选择查询插入数据

来自分类Dev

对来自具有不同行数的两个表的数据求和

来自分类Dev

比较两个具有不同行数的数据集的表达式

来自分类Dev

我如何在Java中的不同行中有两个类彼此交互?

来自分类Dev

我如何在Java中的不同行中有两个类彼此交互?

来自分类Dev

如何在两个目录中查找具有不同内容的文件名

来自分类Dev

如何在外壳中传递两个服务器的密码

来自分类Dev

如何在Matlab中从具有不同行数的不同矩阵中创建矩阵?

来自分类Dev

如何合并具有不同列的两个表

来自分类Dev

如何合并两个不同行和列的文件,并用colums输出匹配行?

来自分类Dev

如何在删除重复项的同时合并具有不同列号的两个表?

来自分类Dev

如何在删除重复项的同时合并具有不同列号的两个表?

来自分类Dev

如何在两个目录中查找名称相同但行数不同的文件?

Related 相关文章

  1. 1

    如何在外壳中合并具有不同行数的两个文件?

  2. 2

    合并两个具有不同行数的矩阵

  3. 3

    在R中将两个具有不同行数的数据帧合并

  4. 4

    合并两个具有不同行数和列数的数据框

  5. 5

    如何使用空行条件合并不同行数的两个文件?

  6. 6

    使用Python Pandas比较具有不同行数的两个Excel文件

  7. 7

    Python:如何添加两个具有不同行数的数据框

  8. 8

    使用Pandas DataFrames比较具有不同标题但具有相同行数据的两个Excel文件

  9. 9

    使用Pandas DataFrames比较具有不同标题但具有相同行数据的两个Excel文件

  10. 10

    我如何在SSIS中合并两个平面文件具有不同的数据类型

  11. 11

    如何在CSS中合并具有不同父元素的两个元素?

  12. 12

    将具有不同行数的 2 个文本文件合并到 csv 文件中

  13. 13

    如何在 group by 子句的帮助下在一个查询中获取两个不同表的不同行数

  14. 14

    MySQL-并行合并具有相同行数的两个不相关的查询

  15. 15

    如何在gnuplot中添加具有不同x基础的两个文件文件

  16. 16

    对来自具有不同行数的两个表的数据求和

  17. 17

    使用两个具有不同行数的选择查询插入数据

  18. 18

    对来自具有不同行数的两个表的数据求和

  19. 19

    比较两个具有不同行数的数据集的表达式

  20. 20

    我如何在Java中的不同行中有两个类彼此交互?

  21. 21

    我如何在Java中的不同行中有两个类彼此交互?

  22. 22

    如何在两个目录中查找具有不同内容的文件名

  23. 23

    如何在外壳中传递两个服务器的密码

  24. 24

    如何在Matlab中从具有不同行数的不同矩阵中创建矩阵?

  25. 25

    如何合并具有不同列的两个表

  26. 26

    如何合并两个不同行和列的文件,并用colums输出匹配行?

  27. 27

    如何在删除重复项的同时合并具有不同列号的两个表?

  28. 28

    如何在删除重复项的同时合并具有不同列号的两个表?

  29. 29

    如何在两个目录中查找名称相同但行数不同的文件?

热门标签

归档