Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 联接2列上的2个文件,对于不匹配项返回0_Unix_Join_Awk_Merge - Fatal编程技术网

Unix 联接2列上的2个文件,对于不匹配项返回0

Unix 联接2列上的2个文件,对于不匹配项返回0,unix,join,awk,merge,Unix,Join,Awk,Merge,我有2个文件,已排序,每个文件有3列。我需要根据前2列合并它们,并返回4列,即匹配的2列,然后是每个文件的第3列。我试着在awk中使用 awk 'NR==FNR{a[$1FS$2]=$3;NEXT} {k=$1FS$2;print k,(a[k]?a[k]:a[k]*1),$3;delete a[k]} END{for(k in a)print k,a[k],"0"}' 但它并没有像我希望的那样起作用 我的输入文件如下所示: 文件1: Chr BPPos芯片_1

我有2个文件,已排序,每个文件有3列。我需要根据前2列合并它们,并返回4列,即匹配的2列,然后是每个文件的第3列。我试着在awk中使用

awk 'NR==FNR{a[$1FS$2]=$3;NEXT}   
  {k=$1FS$2;print k,(a[k]?a[k]:a[k]*1),$3;delete a[k]}        
  END{for(k in a)print k,a[k],"0"}' 
但它并没有像我希望的那样起作用

我的输入文件如下所示:

文件1:

Chr BPPos芯片_1

112341

117652

120433

212314

文件2:

Chr BPPos芯片2

117651

12074 2

212313

221414

期望输出:

Chr BPPos芯片1芯片2

1123410

1176521

1204330

1207302

2 1231 4 3

2214104

任何帮助都将不胜感激

史蒂夫

试试这一行:

awk '{k=$1 FS $2}
     NR==FNR{a[k]=$3;next}
     k in a{print $0,a[k];delete a[k];next}{print $0,"0"}
     END{for(x in a)print x,"0",a[x]}' file2 file1
根据您的数据,输出为:

kent$  awk '{k=$1 FS $2}NR==FNR{a[k]=$3;next}k in a{print $0,a[k];delete a[k];next}{print $0,"0"}END{for(x in a)print x,"0",a[x]}' f2 f1
Chr BPPos Chip_1 Chip_2
1 1234 1 0
1 1765 2 1
1 2043 3 0
2 1231 4 3
1 2074 0 2
2 2141 0 4
输出:

Chr BPPos Chip_1 Chip_2
1 1234 1 0
1 1765 2 1
1 2043 3 0
2 1231 4 3
1 2074 0 2
2 2141 0 4

这似乎给了我一个奇怪的格式在文件的顶部,我的头是不正确的,由于某种原因,第一列和最后一列似乎已经加入。也许我的数据不太正确,我会做一些编辑,然后再试一次,但下面的评论似乎有效,但速度要慢得多。感谢您在这里的帮助,我觉得我应用您的解决方案可能没有做到公正。@slarmer1我用您提供的两个示例进行了测试,您可以看到,输出与答案一起发布。如果问题中的数据格式不是file1 file2,那么输出可能会不同。无论如何,既然你们已经展示了你们的代码,我想你们应该知道awk编程。你可以阅读我的代码,理解我的想法,做相应的改变来适应你的数据。我想我现在已经把它整理好了。再次感谢!我认为这工作得很好,文件很大,所以需要一段时间来检查和确认,但我认为这确实起到了作用。非常感谢。
Chr BPPos Chip_1 Chip_2
1 1234 1 0
1 1765 2 1
1 2043 3 0
2 1231 4 3
1 2074 0 2
2 2141 0 4