如何通过单独的匹配列粘贴到列上

如何通过单独的匹配列粘贴到列上

我有这两个文件:

    file1.txt  
    0 rs3094315 0 0 C T  
    0 rs12562034 0 0 A G  
    0 rs3934834 0 0 C T  

    file2.txt  
    Chr,Pos,snp_name  
    1, 742429,rs3094315   

其中 file1 的第一列也是 Chr 列,必须替换为 file2 chr 列。但是,它必须与 snp 匹配,如下所示:

    file3  
    1 rs3094315 0 0 C T  

File2 具有不同的行号和列号。

答案1

已经在这里部分回答了—— https://stackoverflow.com/questions/24516141/awk-processing-2-files-with- different-field-separators

awk 'NR==FNR {arr[$2]=$2FS$3FS$4FS$5FS$6; next} {print $1,arr[$3]}' file1 FS="," file2 
1 rs3094315 0 0 C T

答案2

使用join能够理解进程替换的 shell:

$ join -t ' ' -1 2 -2 3 -o2.1,0,1.3,1.4,1.5,1.6 <( sort -k2 file1 ) <( tr ',' ' ' <file2 | sort -k3 )
1 rs3094315 0 0 C T

第二个文件file2存在问题,因为它使用与第一个文件 不同的字段分隔符file1。通过运行其内容tr以将所有逗号替换为空格可以解决此问题。

然后,这两个文件将根据我们要加入数据的字段进行排序;第一个文件中的字段 2 和第二个文件中的字段 3。

然后,系统join将读取这两个数据集,并将它们连接到指定的空格分隔字段上。

输出字段由-o标志确定,我们选择第二个文件的第一个字段(连接字段),然后选择第一个文件中的字段 3 到 6。

相关内容