2つの遺伝子データセットがあります。 file2 の列に基づいて file1 をフィルタリングします。しかし、file2の2番目の列も考慮する必要がありますが、どうすればよいかわかりません。
ファイル1行抽出の条件は、同じ染色体上に位置するファイル2の行のうち、所与の染色体位置よりも染色体位置が5000以上または5000未満の行のみを選択することである。以下のコードでその一部を実行しましたが、同じ染色体番号内の行のみをフィルタリングすることについては説明しません。
たとえば、私のデータは次のようになります。
ファイル1:
Variant Chromsome Chromosome Position
Variant1 2 14000
Variant2 1 9000
Variant3 8 37000
Variant4 1 21000
ファイル2:
Variant Chromosome Chromosome Position
Variant1 1 10000
Variant2 1 20000
Variant3 8 30000
期待される出力(同じ染色体上のファイル2の行と比較して位置距離が+/- 5000を超える変形):
Variant Chromosome Position Chromosome
Variant1 14000 2
Variant3 37000 8
#Variant1 at 14000, whilst within 5000 + of Variant1 at 10000 in file2 is on a different chromosome and therefore not compared and is kept.
#Variant3 is on the same chromosome as Variant4 in file1 but larger than 5000+ distance and is kept.
私はコーディングに以前の質問の答えを使用しました(別のファイルの基準に基づいて1つのファイルから行を選択するには?)染色体を考慮せずにフィルタリングする方法を尋ねます。
awk '
NR == FNR {RGMIN[++IX] = $2 - 5000
RGMAX[IX] = $2 + 5000
next
}
FNR == 1 {print
next
}
{PR = 1
for (i=2; i<=IX; i++) PR = PR * ($3 < RGMIN[i] || $3 > RGMAX[i])
}
PR
' file2 file1 > newfile.txt
私は、「file1の行がfile2の染色体番号と一致する場合は、その染色体番号内で5000 +/-フィルタリングのみを実行します」の追加行にifステートメントを追加できるように、構文をよりよく理解しようとしました。他の方法がある場合は、これを私が持っているものに統合する方法がわかりません。
編集する:
それでは、CHROMを追加してみてください。
awk '
NR == FNR {RGMIN[++IX] = $2 - 500000
RGMAX[IX] = $2 + 500000
CHROM[IX] = $2
next
}
FNR == 1 {print
next
}
{PR = 1
for (i=2; i<=IX; i++) if ($2 == CHROM[i]) PR = PR * ($2 < RGMIN[i] || $2 > RGMAX[i])
}
PR
' file2 file1 > newfile.txt
答え1
コメントで提案したとおり:
awk '
NR == FNR {RGMIN[++IX] = $3 - 5000
RGMAX[IX] = $3 + 5000
CHROM[IX] = $2
next
}
FNR == 1 {print
next
}
{PR = 1
for (i=2; i<=IX; i++) if ($2 == CHROM[i]) PR = PR * ($3 < RGMIN[i] || $3 > RGMAX[i])
}
PR
' file2 file1
Variant Chromsome Chromosome Position
Variant1 2 14000
Variant3 8 37000
答え2
file1 に対する file2 の重みに応じて file2 をマップし、file1 の場所がまだマップされていないかどうかをテストすることもできます。
awk 'FNR==NR{for (i=$3-5000; i<=$3+5000; i++){v[$2"."i]=1}}
FNR!=NR{if (! v[$2"."$3]) print $0}
' file2 file1
このデータセットの場合、@RudiCよりも遅いですが、file2に複数の重複範囲が多い場合は、より価値がある可能性があります。