csv 文件操作:比较两个 csv 文件和 return 所有与 header 匹配的行

csv file operation: compare two csv files and return all matched line with header

我正在尝试比较两个 CSV 文件的列,并将所有匹配的行保存到带有 header 的新 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[,]=[=15=];next} A[,]' 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 的 header,如果 header 名称在两个文件中相同,例如如果 file1 的 startposendpos更改为 startend 或 vice-versa.

有什么办法可以不使用完全相同的 header 名称吗?所以我预期的输出文件将是这样的:

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

您可以使用其他条件 FNR == 1:

awk -F, 'NR==FNR {A[,]=[=10=]; next} FNR == 1 || (,) in A' f2 f1

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