【发布时间】:2022-01-11 09:53:15
【问题描述】:
我正在尝试比较两个 CSV 文件的列并将所有匹配的行保存到带有标题的新 CSV 文件中。以下是示例文件
file1:
ID,type,gene,startpos,endpos,product
C20775336,marker,gene1,1895,2166,ID=gene1;Name=maker-C20
C20775337,marker,gene2,895,1166,ID=mRNA1;Parent=gene1;N
C20775339,marker,gene3,1895,1962,Parent=mRNA1
C20775335,marker,gene4,2795,2962,ID=CDS1;Parent=mRNA1
C20775338,marker,gene5,895,1166,ID=mRNA1;Parent=gene1;N
file2:
Id,start,End
C2002,895,1166
C2003,1895,2166
C2004,2795,2962
在这里,我尝试将 file1 的第 4 列和第 5 列与 file2 的第 2 列和第 3 列进行比较,如果匹配,则将其保存到新的 CSV 文件中。
使用这个命令awk -F',' 'NR==FNR{A[$2,$3]=$0;next} A[$4,$5]' file2 file1我得到这个输出:
C20775336,marker,gene1,1895,2166,ID=gene1;Name=maker-C20
C20775337,marker,gene2,895,1166,ID=mRNA1;Parent=gene1;N
C20775335,marker,gene4,2795,2962,ID=CDS1;Parent=mRNA1
C20775338,marker,gene5,895,1166,ID=mRNA1;Parent=gene1;N
但我也想要 file1 的标题,如果两个文件中的标题名称相同,例如如果 file1 的 startpos 和 endpos 更改为 start 和 end 或反之亦然。
有没有什么办法没有相同的标题名称,可以做到。所以我预期的输出文件将是:
output:
ID,type,gene,startpos,Endpos,product
C20775336,marker,gene1,1895,2166,ID=gene1;Name=maker-C20
C20775337,marker,gene2,895,1166,ID=mRNA1;Parent=gene1;N
C20775335,marker,gene4,2795,2962,ID=CDS1;Parent=mRNA1
C20775338,marker,gene5,895,1166,ID=mRNA1;Parent=gene1;N
【问题讨论】: