遺伝物質に関する情報を含むタブ区切りのファイルがあります。一部の情報は小さなタブファイルに切り捨てられ、一部の列は抽出され、重複がないことを確認するためにuniqが使用されました。後でパイプラインで重要になる数を保存します。 uniq関数の基本を単にあるフィールドのシーケンスベースから別のフィールドの正規表現に変更したいと思います。抽出するフィールドの形式は次のとおりです。
14:50065421-50065521:12397472_t14_w100_x1
ただし、2番目のコロンの後のビットはファイル入力に応じて変化します。前半に基づいてuniqを使いたいです。
14:50065421-50065521
正規表現 '((^[0-9]{0,2}|x|y|MT):[0-9]{0,9}-[0-9]{0,9}: ) をテストしました。 'そしてそれは小さなデータサンプルで動作します。 grepとperlスクリプトを使っていくつかの方法を見つけました。どちらも正規表現に基づいて行を削除できますが、それらのどれもカウントを提供しません(これはuniqが理想的な理由です)。 uniqで正規表現を使用する方法はありますか?それとも削除回数を保存するより良い方法はありますか?
現在のコードは次のとおりです。
cat ${TAB_FILE} | \
sed -e '1,2d' | \
cut -f3,4 | \
sort -k1 -u | \
sort -k2 | \
uniq -cf1| \
sort -rn > t1
cat ${TAB_FILE} | \
sed -e '1,2d' | \
awk {'print $3"\t "$6"\t" $7"\t "$4'} | \
sort -k4 > t2
awk 'FNR==NR {C[$2]=$1;next}FNR==1 \
{print "Count Chromosome:Positions:QNAME Sequence Exon Transcript_ID"; next}$1 in C \
{print C[$1], $1, $4, $3, $2}' t1 t2 > t3
cat t3 | awk '{print "//NODECLASS\t\"" $2"_"$1 "\"\t\"Exon " $4 "\"\t\"" $5 "\""}'
最初のステップから2列を使用する代わりに、クリッピングの1列に基づいて正規表現を作成したいと思います。どんな助けでも大変感謝します。明確にする必要がある場合は、いつでもお問い合わせください。
タブファイルの例:
queryHits subjectHits readname readSeq geneid transcriptid exonnumber genename biotype
350851 1 14:50065421-50065521:12397472_t14_w100_x1 CGCTGCCAGCTGCGCGCTCGGGGGAAAAGACGTTGCGCCCCCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCA ENSG00000165501 ENST00000298288 1 LRR1 protein_coding
350851 5 14:50065421-50065521:12397472_t14_w100_x1 CGCTGCCAGCTGCGCGCTCGGGGGAAAAGACGTTGCGCCCCCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCA ENSG00000165501 ENST00000318317 1 LRR1 protein_coding
350851 8 14:50065421-50065521:12397472_t14_w100_x1 CGCTGCCAGCTGCGCGCTCGGGGGAAAAGACGTTGCGCCCCCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCA ENSG00000165501 ENST00000554869 1 LRR1 protein_coding
350852 1 14:50065461-50065561:12655987_t14_w100_x1 CCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAG ENSG00000165501 ENST00000298288 1 LRR1 protein_coding
350852 5 14:50065461-50065561:12655987_t14_w100_x1 CCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAG ENSG00000165501 ENST00000318317 1 LRR1 protein_coding
350852 8 14:50065461-50065561:12655987_t14_w100_x1 CCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAG ENSG00000165501 ENST00000554869 1 LRR1 protein_coding
350853 1 14:50065471-50065571:22679947_t13_w100_x1 CCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAGCCGTTTCCCG ENSG00000165501 ENST00000298288 1 LRR1 protein_coding
350853 5 14:50065471-50065571:22679947_t13_w100_x1 CCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAGCCGTTTCCCG ENSG00000165501 ENST00000318317 1 LRR1 protein_coding
350853 8 14:50065471-50065571:22679947_t13_w100_x1 CCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAGCCGTTTCCCG ENSG00000165501 ENST00000554869 1 LRR1 protein_coding
uniqのない出力ファイルの例、4行、5行、6行、8行、9行、10行などの重複エントリを削除できるようにしたい。
//NODECLASS "Chromosome:Positions:QNAME_Count" "Exon Exon" "Transcript_ID"
//NODECLASS "14:50067283-50067383:20149917_t14_w100_x1_1" "Exon 1" "ENST00000557531"
//NODECLASS "14:50067284-50067366:14257122_t14_w100_x1_2" "Exon 1" "ENST00000557531"
//NODECLASS "14:50067285-50067385:2072777_t12_w100_x1_1" "Exon 1" "ENST00000557531"
//NODECLASS "14:50074262-50074362:4355312_t12_w100_x1_1" "Exon 3" "ENST00000298288"
//NODECLASS "14:50074262-50074362:4355312_t12_w100_x1_1" "Exon 4" "ENST00000540712"
//NODECLASS "14:50074262-50074362:4355312_t12_w100_x1_1" "Exon 4" "ENST00000554869"
//NODECLASS "14:50067286-50067386:15839225_t12_w100_x1_3" "Exon 1" "ENST00000557531"
//NODECLASS "14:50074263-50074363:8914169_t11_w100_x1_1" "Exon 3" "ENST00000298288"
//NODECLASS "14:50074263-50074363:8914169_t11_w100_x1_1" "Exon 4" "ENST00000540712"
//NODECLASS "14:50074263-50074363:8914169_t11_w100_x1_1" "Exon 4" "ENST00000554869"
//NODECLASS "14:50067287-50067387:5439923_t13_w100_x1_1" "Exon 1" "ENST00000557531"
//NODECLASS "14:50067287-50067387:14106336_t12_w100_x1_3" "Exon 1" "ENST00000557531"
//NODECLASS "14:50074404-50074504:15492363_t11_w100_x1_1" "Exon 3" "ENST00000298288"
//NODECLASS "14:50074404-50074504:15492363_t11_w100_x1_1" "Exon 4" "ENST00000540712"
//NODECLASS "14:50074404-50074504:15492363_t11_w100_x1_1" "Exon 4" "ENST00000554869"
//NODECLASS "14:50074135-50074235:11346262_t11_w100_x1_2" "Exon 3" "ENST00000298288"
ベストアンサー1
ソート/ユニークなアイテムに集中しすぎているようなので、正確に何をしたいのかわかりません。
ただし、4,5,6、8,9,10などの重複行をカットする必要がある場合は、// NODECLASS行を持つ最後のファイルでこれを行うことができます。
perl -F\" -lane '
print,next if $. < 3;
print if ! $h{($F[1] =~ /:(.*?):/)[0]}++;
' NODE_CLASS_file
最初の2行は印刷からスキップされます。残りは:の間の数字である2番目のフィールドを見て/:(.*?):/
数字を提供し、それを含め(...)[0]
てハッシュのキーに渡してスカラーコンテキストに入る必要があります%h
。現在の行は、このキーがまだ表示されていない場合にのみ印刷されます。