一般問題: 我正在嘗試使用索引查找基於參考表的名稱。我的文檔和參考表中的第一列的值需要匹配,但後來我想檢查我的文件中的數值,在我的參考表中的兩個數值列之間下降。如果是這樣,我想從參考表中打印相應的名稱到我的文件中的新列。否則,我想打印「NA」多列查找
具體例子 我想匹配我的文件和參考表的第一列(CHR),看看它們是否匹配。如果是這樣,我想看看在文件(POS)的第2列的值大於所述基準(開始)的3列,但小於基準(完)的4列中。如果是這樣,我想從參考表中添加相應的col 4(Gene_name)到我的文件的新的第4列。如果沒有相應的基因,我想把「NA」放在我的文件的基因名稱列中。
文件
Chr pos p-val
2L 1885826 2.638e-08
2L 1996567 5.12e-05
2L 2360597 9.472e-05
2R 2360621 9.472e-05
2R 2360623 9.472e-05
參考
Chr Start End Gene_name
2L 1884260 1888828 FBgn0262029
2L 19531851 19547482 FBgn0052532
2L 2350523 2361570 FBgn0023536
2L 4647871 4648646 FBgn0029718
所需的輸出
Chr pos p-val Gene_name
2L 1885826 2.638e-08 FBgn0262029
2L 1996567 5.12e-05 NA
2L 2360597 9.472e-05 FBgn0023536
2R 2360621 9.472e-05 NA
2R 2360623 9.472e-05 NA
嘗試
我一直在試圖從這個問題調整代碼來做到這一點。 awk Lookup 2 files, print match and Sum of Sencond Field:
到目前爲止,我有這樣的:
awk -F"\t" ' #Set Field separator to "\t"
FNR==NR {a[$1];a[$2];a[$3];next} #Read data from Reference using field #1, field #2, field #3 as index in to array a
{if ($1 in a) #Test if field #1 in Table is found in a
{if ($2 > a[$2])
{if ($2 < a[$3])
print $0, a[$4] #If found, print line of f1.txt with sum and index from array
else print $0,"NA" #If not found print line of f1.txt with NotFound
}
else print $0,"NA" #If not found print line of f1.txt with NotFound
}
else print $0,"NA" #If not found print line of f1.txt with NotFound
}
' OFS="\t" Referance.txt File.txt #Set Output field separator to , and read files
產生
2L 1885826 2.638e-08 NA
2L 1996567 5.12e-05 NA
2L 2360597 9.472e-05 NA
2R 2360621 9.472e-05 NA
2R 2360623 9.472e-05 NA
我想我在嵌套if else語句犯了一個錯誤的地方,但我不知道是什麼我做錯了。將不勝感激任何建議!