基于公共列合并两个文件;为文件 2 中不存在的变体添加 0,并在存在的变体中保留原始值

克利尔

我想合并两个共享一些公共数据的文件。文件 1 包含的不仅仅是文件 2。我想按照文件 1 的顺序基于它们的共享列 (3) 合并文件,并且当文件 2 中不存在变量时,我想将 0 添加到第 5 列 (AN1),如果存在,添加 AN1 的原始值(0 或 1)。

我的文件如下所示:文件 1

CHR BP  SNP CM  base
20  61098   rs6078030   -0.00024510777  1
20  61795   rs4814683   0   1
20  63231   rs6076506   0.0005026053    1
20  63244   rs6139074   0.00050714752   1

档案 2

CHR BP  SNP CM  AN1
20 9836704 rs221007 0 1
20 9817032 rs221011 0 0
20 9764069 rs2206484 0 0
20 9639395 rs4816159 0 1

我想根据第 3 列(SNP)匹配它们。我现在想保留所有其他列。

我想要的输出看起来像这样(当 rsX 不存在时为 0,或者当 AN1 的原始值为 0 时):

文件 3

CHR BP  SNP CM  base AN1
20  61098   rs6078030   -0.00024510777  1   1
20  61795   rs4814683   0   1   0
20  63231   rs6076506   0.0005026053    1   0
20  63244   rs6139074   0.00050714752   1   1

我需要根据新的条件修改这段代码:

awk 'NR==FNR{ snp[$3]; next }
{ $6=($3 in snp)?(FNR==1?"AN1":"1"):"0" }1' file2 file1

在这里,当文件 1 中存在 rsX 时,我打印 1。我想打印 AN1 的原始值(0 或 1)

αғsнιη
awk 'NR==FNR{ snp[$3]=$NF; next }
{ $6=($3 in snp)?(FNR==1?"AN1":snp[$3]):"0" }1' file2 file1

事情在awk

NR:目前看到的输入记录总数。
FNR: 当前输入文件中的输入记录编号,下一个输入文件将重置为 1。

因此,NR==FNR只有第一个输入文件的条件始终为真,NR==FNR { ... }当它为真时将执行以下块,并且我们确实将最后一列值保存$NF到一个列为键awk数组中snp$3

next语句导致awk跳过执行其余代码并重新开始,如果NF==FNR仍然为真,它将重复处理该块,直到读取第一个输入文件的所有记录/行。

然后在下一个块中,我们$6使用以下条件添加/更新列的值

  • 如果 file1 中的 column#3 设置在snpfile2 的数组中,则执行以下操作:
    • 如果是第一行,则将其值设置为 AN1
    • 如果不是第一行,则将其值设置为从snp[$3]数组中读取的值
  • 否则设置为0.

毕竟用于打印结果awk idom1

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据公共列合并两个文件;如果变体存在于文件 2 中,则保留该值,并将 0 添加到文件 2 中不存在的那些

根据同一列合并两个文件,并将0添加到文件2中不存在的文件中

从不存在的2个表中插入数据

基于两个公共列合并两个文件,并将空白替换为0

如何在Google App脚本中比较2个数组中的元素(如果不存在,则添加)?

JavaScript为数组中不存在的键添加零

如果PostgreSQL中不存在该如何添加列?

dcast() - 添加 R 中不存在的列

左联接两个表,以使表1中不存在表2的两列

比较2个数据框并按顺序添加列(如果不存在)

ssis如果源文件中不存在,则使用默认值添加列

如果在两个列表的比较中不存在,则添加列表元素

如何比较2个文件并删除不存在的行?

熊猫:添加列(如果不存在)

添加列(如果不存在)

Redshift:添加列(如果不存在)

cassandra添加列(如果不存在)

添加列(如果不存在)

如果设置为 0 的列中不存在值

如果存在则替换以字符串开头的文件中的行,如果不存在则添加

H2仅在列不存在时添加列

在 R 中添加一个包含存在/不存在信息的新列

合并两个对象并删除原始对象中不存在的属性

使用awk如何合并2个文件(例如A和B)并执行左外部联接功能,并在两个文件中包括所有列

更改配置文件中的值,或者如果不存在则添加设置?

如果参数尚不存在,则在文件中添加(添加)行

SonarQube分析中不存在文件

Java中的文件不存在异常

根据公共列值合并两个文件