【问题标题】:how to intersect multiple files by several columns如何将多个文件按几列相交
【发布时间】:2021-07-02 17:25:56
【问题描述】:

我在这方面花了很多时间,如果有任何帮助,我将不胜感激。 我有两个文件如下;我想要做的是在f2_col3 中分别搜索f1_col1f1_col2 的每个项目 - 如果一个项目存在,则保存它并将其相关行从(f2_col3) 添加到新列中的新列df.

f1:(两列)

f1_col1,f1_col2
kctd,Malat1
Gas5,Snhg6

f2:(三列)

f2_col1,f2_col2,f2_col3
chr7,snRNA,Gas5
chr1,protein_coding,Malat1
chr2,TEC,Snhg6
chr1,TEC,kctd

因此,根据提到的两个文件,所需的输出应该是:

new_df:

f1_col1,f1_col2,f2_col1,f2_col1
kctd,Malat1,chr1,chr1
Gas5,Snhg6,chr7,chr2

注意:f2_col2 并不重要。

我没有很强的编程背景,发现这非常困难 - 即使我检查了多个来源但无法开发解决方案 - 任何帮助都非常感谢。谢谢

【问题讨论】:

  • 如果在f2 中没有找到f2_col1f2_col2 (XOR),那么输出是什么?在问这个问题之前你尝试了什么?另外,您的意思是:注意:f2_col2 不重要?顺便说一句,此时不是我的反对票。
  • 没有仔细阅读这篇文章,但请检查基础 R 中的 ?mergedplyr 中的 ?full_join(和其他 *_join 选项)

标签: python r bash awk


【解决方案1】:

基于对您的要求的 1 种可能解释和您提供的 1 个晴天示例,其中每个关键字段始终在每一行上匹配,这可能是您想要做的:

$ cat tst.awk
BEGIN { FS=OFS="," }
NR==FNR {
    if ( FNR == 1 ) {
        hdr = $1
    }
    map[$3] = $1
    next
}
{ print $0, ( FNR>1 ? map[$1] OFS map[$2] : hdr OFS hdr ) }

$ awk -f tst.awk f2 f1
f1_col1,f1_col2,f2_col1,f2_col1
kctd,Malat1,chr1,chr1
Gas5,Snhg6,chr7,chr2

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多