ここでのプログラミング初心者は、AWKスクリプトを条件付きに変更するための支援が必要です。代替の非awkソリューションも大歓迎です。
注メインフィルタリングは、Bireiの支援のおかげで機能していますが、追加の問題があります。詳細については、以下の注を参照してください。
次のような3列の一連の入力ファイルがあります。
chr4 190499999 190999999
chr6 61999999 62499999
chr1 145499999 145999999
これらの行を使用して別のファイル(refGene.txt)をフィルタリングし、ファイル1の行がrefGene.txtの行を計算する場合、refGene.txtの列13を新しいファイル'ListofGenes_$f'に出力します。私にとってトリッキーな部分は、列1(たとえば、'chr4'、'chr6'、'chr1')と列2および/または列3がrefGeneの同等の列と一致する限り、一致としてカウントすることです。 txtファイル。2つのファイル間の同等の列は、$ 1 = $ 3、$ 2 = $ 5、$ 3 =$6です。次に、awkで、refGene.txtから行全体を出力せず、列13のみを出力する方法がわかりません。
注Bireiの助けを借りて、上記の条件付きフィルタリングを実現しました。次に、追加のフィルター条件を組み込む必要があります。また、値$2と$3の間の領域のいずれかがrefGene.txtファイルの$5と$6の間の領域と重複する場合は、refGene.txtファイルから列$13を出力する必要があります。これは、領域が重なっているかどうかを確認するための数学的な計算を伴うため、非常に難しいようです。
これまでの私のスクリプト:
FILES=/files/*txt
for f in $FILES ;
do
awk '
BEGIN {
FS = "\t";
}
FILENAME == ARGV[1] {
pair[ $1, $2, $3 ] = 1;
next;
}
{
if ( pair[ $3, $5, $6 ] == 1 ) {
print $13;
}
}
' $(basename $f) /files/refGene.txt > /files/results/$(basename $f) ;
done
どんな助けでも本当にありがたいです。本当にありがとう!
ルバル