我有以下兩個文件:AWK設置變量,使一系列
文件1:
1 290 rs1345
2 450 rs5313
1 1120 rs4523
2 790 rs4325
文件2:
1 201 LDLR
2 714 APOA5
1 818 NOTCH5
1 514 TTN
我想孤立僅在文件中的行2其中第二個字段在文件1中的第二個字段的100個單元內(如果字段1匹配):
期望的輸出:(n注意第三個字段來自file1中的匹配行)。
1 201 LDLR rs1345
2 714 APOA5 rs4325
我嘗試使用下面的代碼:
for i in {1..4} #there are 4 lines in file2
do
chr=$(awk 'NR=="'${i}'" { print $1 }' file2)
pos=$(awk 'NR=="'${i}'" { print $2 }' file2)
gene=$(awk 'NR=="'${i}'" { print $3 }' file2)
start=$(echo $pos | awk '{print $1-100}') #start and end variables for 100 unit range
end=$(echo $pos | awk '{print $1+100}')
awk '{if ($1=="'$chr'" && $2 > "'$start'" && $2 < "'$end'") print "'$chr'","'$pos'","'$gene'"$3}' file1
done
的代碼不工作,我相信什麼是錯的我開始和結束的變量,因爲當我回聲$開始,我得到414,這對我來說沒有任何意義,當我回聲$結束時我得到614。
我明白這個問題可能很難理解,所以請問我是否需要澄清。
謝謝。
你可以在awk中完成這一切,而不是awk和shell的混亂。將第一個文件的內容加載到數組中,然後在循環第二個文件時使用它。 –
如果文件1中的_any_行具有匹配的字段1和範圍在100的字段2,您希望從文件2打印行?如果文件1中的多行具有匹配的字段1和100內的字段2,該怎麼辦? – jas