2つの入力ファイルがあります
File A
chr1 1167639 0
chrX 114868305 14
chr1 1167653 0
chr11 62389325 2
chr9 140127768 17
File B
chr10 73082492 73082831 SLC29A3
chr11 46332562 46332760 CREB3L1
chr11 62389317 62389439 B3GAT3
chrX 22056566 22056675 PHEX
chrX 114868291 114868413 PLS3
これが私が望む出力です
chrX 114868305 14 chrX 114868291 114868413 PLS3
chr11 62389325 2 chr11 62389317 62389439 B3GAT3
私が望むのは、ファイルBの列1からファイルAの列1要素を見つけることです。文字列が同じ場合は、ファイルAの2番目の列番号を取得し、ファイルBの2番目の列と3番目の列の間のファイルB番号の範囲に含まれていることを確認してください。含まれている場合は、ファイルAとファイルBの行を出力の1行に印刷します。
答え1
$ cat tst.awk
BEGIN { OFS="\t" }
NR==FNR {
++cnt[$1]
beg[$1,cnt[$1]] = $2
end[$1,cnt[$1]] = $3
val[$1,cnt[$1]] = $0
next
}
$1 in cnt {
for (i=1; i<=cnt[$1]; i++) {
if ( (beg[$1,i] <= $2) && ($2 <= end[$1,i]) ) {
print $0, val[$1,i]
}
}
}
$ awk -f tst.awk fileB fileA
chrX 114868305 14 chrX 114868291 114868413 PLS3
chr11 62389325 2 chr11 62389317 62389439 B3GAT3
上記は、タブで区切られた出力が必要であると仮定しています。それ以外の場合は削除しBEGIN { OFS="\t" }
、視覚的にテーブルとして表示するにはパイプで接続しますcolumn -t
。