유전 물질에 대한 정보가 포함된 탭으로 구분된 파일이 있습니다. 일부 정보는 더 작은 탭 파일로 잘렸고 일부 열은 추출되었으며 중복이 없는지 확인하는 데 uniq가 사용되었습니다. 나중에 파이프라인에서 중요하게 될 개수를 저장합니다. uniq 함수의 기본을 단순히 한 필드의 시퀀스 기반에서 다른 필드의 정규식으로 변경하고 싶습니다. 추출하려는 필드의 형식은 다음과 같습니다.
14:50065421-50065521:12397472_t14_w100_x1
그러나 두 번째 콜론 뒤의 비트는 파일 입력에 따라 변경됩니다. 전반부를 기준으로 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
처음 두 줄은 인쇄에서 건너뜁니다. 나머지는 : 사이의 숫자인 두 번째 필드를 살펴보고 /:(.*?):/
숫자를 제공한 다음 이를 포함 (...)[0]
하고 해시의 키로 전달하여 스칼라 컨텍스트로 들어가야 합니다 %h
. 현재 행은 이 키가 아직 표시되지 않은 경우에만 인쇄됩니다.
답변2
탭 파일에 시작 위치와 끝 위치를 별도의 열로 추가하여 대략적인 해결책을 찾았습니다. 그런 다음 Nodeclass 파일을 생성할 때 이 열을 추출하고 시퀀스 열 대신 이를 기반으로 sort | uniq -c를 사용합니다. 내가 원하는 대로 작동하는 것 같지만 탭 파일을 생성하는 스크립트가 전체 추가 열을 생성해야 하기 때문에 조금 느립니다! 감사해요:)