
2つのファイルがあり、このファイルを1行ずつ私のコマンドで並列に読みたいと思います。このコマンドはスタンドアロンで実行されます。
最初の引数は最初の列で一致し、data.fileで列9を印刷するには、列4と5の2つの数値比較と一致する必要があります。これは実際に動作します。
awk '$1=="argument1" && $4<"argument2" && $5>"argument3" {print f} {f=$9}' ../data.file >> OUTPUT.txt
1)今すぐ実行してパラメータを変数に置き換え、2つの異なるファイルからの入力を使用したいと思います。このような:
cat FILE1a FILE2a | while read FILE1 && read FILE2; do
awk -v j="$FILE1" -v i="$FILE2" '$1==j && $4<i && $5>i {print f} {f=$9}' ../data.file >> OUTPUT.txt
done
しかし、何らかの理由で私は何の結果も得られません。 「and」を使って変数を作成してみましたが、ここでは出力を取得できません。この問題を解決する方法を教えてください。とても感謝しています。
2)また、パラメータが次のように一致しない場合は、「no_match_found」を印刷したいと思います。
awk '$1=="argument1" && $4<"argument2" && $5>"argument3" {print f} {f=$9} END { if (!p) print "No_match_found"}' ../data.file >> OUTPUT.txt
これは、コマンドに対して機能しているように見えますが、一致するものがない場合だけでなく、実際に一致するものが見つかった場合でも「No_match_found」を印刷します。少し混乱しています。
したがって、コマンド全体は次のようにする必要がありますが、機能させることはできません。
cat FILE1a FILE2a | while read FILE1 && read FILE2; do
awk -v j="$FILE1" -v i="$FILE2" '$1==j && $4<i && $5>i {print f} {f=$9} END { if (!p) print "No_match_found"}' ../data.file >> OUTPUT.txt
done
どんな助けでも大変感謝します。
以下は、これらのファイルの例です。 ファイル1
scaffold100
scaffold100
scaffold100
scaffold110
scaffold127
ファイル2
20331
63580
82754
80477
114357
データファイル
scaffold100 RGF GHT 267634 268411 . - . ID=scaffold100.13_LINE-1_reverse_transcriptase-like
scaffold100 RGF GHT 269975 271003 . - . ID=scaffold100.14_LINE-1_reverse_transcriptase-like
scaffold100 RGF GHT 272492 272848 . - . ID=scaffold100.15_Pleckstrin-likey_domain-containing_protein_1
scaffold100 RGF GHT 276355 277065 . - . ID=scaffold100.16_NA
scaffold100 RGF GHT 278580 281340 . - . ID=scaffold100.17_putative_RNA_pseudouridine_synthase_YlyB
scaffold100 RGF GHT 296344 308565 . - . ID=scaffold100.18_Outer_membrane_protein_assembly_factor_BamB
scaffold100 RGF GHT 324074 337460 . - . ID=scaffold100.19_hypothetical_protein_AK812_SmicGene20166
scaffold100 RGF GHT 344155 379840 . - . ID=scaffold100.20_Procollagen_galactosyltransferase_1
scaffold100 RGF GHT 392748 402819 . - . ID=scaffold100.21_Alkylated_DNA_repair_protein_alkB-like_8
scaffold100 RGF GHT 404481 415086 . - . ID=scaffold100.22_Voltage-dependent_P/Q-type_calcium_channel_subunit_alpha-1A
scaffold100 RGF GHT 461507 466605 . - . ID=scaffold100.23_hypothetical_protein_AK812_SmicGene32864
scaffold100 RGF GHT 20321 21040 . - . ID=scaffold100.3_Gamma-tubulin_complex_component_4-like
scaffold100 RGF GHT 53560 69701 . - . ID=scaffold100.4_COBW_domain-containing_protein_1
scaffold100 RGF GHT 72734 97123 . - . ID=scaffold100.5_Polycystin-2
scaffold127 RGF GHT 106337 122095 . - . ID=scaffold127.6_Histone-lysine_N-methyltransferase_SMYD3
scaffold127 RGF GHT 155484 177458 . + . ID=scaffold127.9_Tetratricopeptide_repeat
希望の出力:
ID=scaffold100.3_Gamma-tubulin_complex_component_4-like
ID=scaffold100.4_COBW_domain-containing_protein_1
ID=scaffold100.5_Polycystin-2
No_match_found
ID=scaffold127.6_Histone-lysine_N-methyltransferase_SMYD3
答え1
$ cat tst.awk
NR==FNR {
++cnt[$1]
beg[$1,cnt[$1]] = $4
end[$1,cnt[$1]] = $5
map[$1,$4,$5] = $9
next
}
{
result = "No_match_found"
for (i=1; i<=cnt[$1]; i++) {
if ( (beg[$1,i] < $2) && ($2 < end[$1,i]) ) {
result = map[$1,beg[$1,i],end[$1,i]]
break
}
}
print result
}
。
$ paste file1 file2 | awk -f tst.awk data.file -
ID=scaffold100.3_Gamma-tubulin_complex_component_4-like
ID=scaffold100.4_COBW_domain-containing_protein_1
ID=scaffold100.5_Polycystin-2
No_match_found
ID=scaffold127.6_Histone-lysine_N-methyltransferase_SMYD3