我正在嘗試比較兩個 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以及其實作的標頭如果標題的名字是在,例如,如果兩個檔案相同startpos和endpos改變到的檔案1start和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
uj5u.com熱心網友回復:
您可以使用另一個條件FNR == 1:
awk -F, 'NR==FNR {A[$2,$3]=$0; next} FNR == 1 || ($4,$5) 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408118.html
標籤:
下一篇:Bash直線別名
