我有一个密钥文件file1
,(新行上的每个密钥),我需要用它来从第二个文件file2
中提取某些列。文件1长46行,而file2
大得多,>20,000
行长。并非file1
中显示的所有键都显示在file2
中,反之亦然。
文件1:
322510472
322510472
322510472
322510484
322510484
322510484
322510493
file2的:
109287879,Invertebrate_iridescent_virus_3,109287879,148,1,148,NCVOG0391,0
109287880,Invertebrate_iridescent_virus_3,109287880,458,1,458,,
109287881,Invertebrate_iridescent_virus_3,109287881,156,1,156,,
109287882,Invertebrate_iridescent_virus_3,109287882,451,1,451,NCVOG1423,0
109287883,Invertebrate_iridescent_virus_3,109287883,217,1,217,NCVOG4910,2
109287884,Invertebrate_iridescent_virus_3,109287884,494,1,494,NCVOG0211,0
109287885,Invertebrate_iridescent_virus_3,109287885,447,1,447,NCVOG1077,0
109287886,Invertebrate_iridescent_virus_3,109287886,347,1,347,NCVOG0967,2
file1
和file2
都按密钥排序,该密钥显示在file2
的第1列和第3列中。
我需要生成第三个文件file3
,其中包含来自file1
的密钥,以及来自file2
的第2列和第7列,并且不会忽略任何存在的密钥在file1
中,即使file2
中没有匹配的条目。
我知道我的密钥文件file1
中有46个条目。但是,当我使用以下awk脚本时,
awk -F"," 'NR==FNR {a[$1]=$1 FS $2 FS $7; next} $1 in a {print a[$1],$2,$7}' file2 file1
我只看到44行输出。
我不需要删除awk输出中的任何键,因为它们对应于我需要保存在包含这些键的其他文件中的实际数据。
有什么建议吗?感谢您的帮助;我已经读了一段时间的堆栈溢出,但这是我第一次提出问题!
答案 0 :(得分:3)
您的数据没有任何匹配项,因此我修改了您的密钥以包含匹配的条目
$ join -t, -a1 -o1.1,2.2,2.7 file1 file2
109287879,Invertebrate_iridescent_virus_3,NCVOG0391
109287880,Invertebrate_iridescent_virus_3,
109287882,Invertebrate_iridescent_virus_3,NCVOG1423
109287884,Invertebrate_iridescent_virus_3,NCVOG0211
109287886,Invertebrate_iridescent_virus_3,NCVOG0967
322510472,,
322510472,,
322510472,,
这是我用过的文件。
109287879
109287880
109287882
109287884
109287886
322510472
322510472
322510472