Tenho gtf
arquivos em mais de 100 diretórios. Abaixo estou mostrando como eles ficam.
SampleA
|___________ SampleA.GRCh38.gtf
SampleB
|___________ SampleB.GRCh38.gtf
Aqui estou mostrando apenas dois gtf
arquivos como exemplo.
SampleA.GRCh38.gtf
parece abaixo:
# stringtie -e -B -p 8 -G /path/stringtie_output/stringtie_merged.gtf -o /path/SampleA.GRCh38.gtf /path/SampleA.sorted.bam
# StringTie version 1.3.3
chr1 StringTie transcript 11594 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15038 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "2"; cov "0.0";
chr1 StringTie exon 15796 16765 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "3"; cov "0.0";
chr1 StringTie exon 16858 17055 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "4"; cov "0.0";
chr1 StringTie exon 17233 17742 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "5"; cov "0.0";
chr1 StringTie exon 17915 18061 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "6"; cov "0.0";
chr1 StringTie exon 18268 19364 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "7"; cov "0.0";
chr1 StringTie exon 189836 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "8"; cov "0.0";
chr1 StringTie transcript 11594 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15236 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "2"; cov "0.0";
chr1 StringTie exon 185758 187287 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "3"; cov "0.0";
chr1 StringTie exon 187376 187577 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "4"; cov "0.0";
chr1 StringTie exon 187755 187890 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "5"; cov "0.0";
chr1 StringTie exon 188130 188266 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "6"; cov "0.0";
chr1 StringTie exon 188439 188584 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "7"; cov "0.0";
chr1 StringTie exon 188791 188902 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "8"; cov "0.0";
chr1 StringTie exon 195263 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "9"; cov "0.0";
chr1 StringTie transcript 11594 197912 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.5"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
E SampleB.GRCh38.gtf
fica como abaixo:
# stringtie -e -B -p 8 -G /path/stringtie_output/stringtie_merged.gtf -o /path/SampleB.GRCh38.gtf /path/SampleB.sorted.bam
# StringTie version 1.3.3
chr1 StringTie transcript 11594 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; cov "0.0"; FPKM "0.000000"; TPM "1.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15038 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "2"; cov "0.0";
chr1 StringTie exon 15796 16765 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "3"; cov "0.0";
chr1 StringTie exon 16858 17055 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "4"; cov "0.0";
chr1 StringTie exon 17233 17742 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "5"; cov "0.0";
chr1 StringTie exon 17915 18061 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "6"; cov "0.0";
chr1 StringTie exon 18268 19364 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "7"; cov "0.0";
chr1 StringTie exon 189836 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "8"; cov "0.0";
chr1 StringTie transcript 11594 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; cov "0.0"; FPKM "0.000000"; TPM "3.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15236 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "2"; cov "0.0";
chr1 StringTie exon 185758 187287 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "3"; cov "0.0";
chr1 StringTie exon 187376 187577 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "4"; cov "0.0";
chr1 StringTie exon 187755 187890 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "5"; cov "0.0";
chr1 StringTie exon 188130 188266 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "6"; cov "0.0";
chr1 StringTie exon 188439 188584 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "7"; cov "0.0";
chr1 StringTie exon 188791 188902 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "8"; cov "0.0";
chr1 StringTie exon 195263 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "9"; cov "0.0";
chr1 StringTie transcript 11594 197912 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.5"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
Quero extrair apenas transcript
da 3ª coluna e transcript_id
qual é a 10ª coluna e TPM
qual é a última coluna. Mas TPM
precisa ser os nomes das amostras.
Quero que a saída seja semelhante a abaixo:
Type transcript_id SampleA SampleB
transcript MSTRG.7542.2 0.000000 1.000000
transcript MSTRG.7542.6 0.000000 3.000000
transcript MSTRG.7542.5 0.000000 1.000000
Responder1
Você precisará extrair os registros relevantes de cada arquivo e gravar o resultado em dois novos arquivos temporários (possivelmente usando awk
), possivelmente classificando-os (com sort
) ao mesmo tempo (os arquivos de amostra dizem que estão classificados, mas talvez não no correto chave). Aqui está um exemplo de processamento de um dos arquivos:
awk '$3 == "transcript" {printf("%s %s %s ", $3, $10, $12, $18);}' SampleA.GRCh38.gtf | sort -k 2 > tf1
Então você pode usar join
para mesclar os dois arquivos temporários/intermediários gerados por awk
para que cada registro tenha as duas colunas finais de cada arquivo.
Aqui está um exemplo de um join
comando que você pode usar:
join -o 1.1,1.2,1.3,2.3 -1 2 -2 2 tf1 tf2
Você pode querer imprimir uma linha de cabeçalho (por exemplo, usando o printf
comando) antes de executar join
e substituir espaços na join
saída por tabulações (por exemplo, usando sed
) ou usar outro awk
script para formatar a saída.
A partir desses exemplos, você poderá montar um script que processará ambos os arquivos e produzirá a saída desejada (e limpará os arquivos temporários, etc.).
Observe que dependendo do tamanho dos arquivos de dados você pode até ser capaz de fazer tudo em um awk
(ou python
ou perl
, etc.) programa (ou seja, todos os dados selecionados de ambos os arquivos podem ser facilmente mantidos na memória de uma só vez).
Responder2
Você pode apenas join
os arquivos e depois awk
retirar aqueles com NF==4
apenas as linhas de seu interesse, que têm um 18º campo. Todas as outras linhas terão apenas 2 campos
Também fazendo certas suposições sobre o cálculo do caminho para SampleB
, no entanto, você pode alterar isso para se adequar....
while IFS= read -r -d '' f; do #read the list of SampleA
g=$(echo "$f" | sed "s/pleA/pleB/g") #calculate path to SampleB
if [[ -f "$g" ]]; then #check SampleB exists
echo "$f" | sed "s/.*pleA\.//g" #print sample No
echo "Type transcript_id SampleA SampleB" #print header
#do the join
join -j 12 -o 1.3 -o 1.12 -o 1.18 -o2.18 <(sort -k 12 "$f") <(sort -k 12 "$g") | awk 'NF==4'
fi | sed 's/[;"]//g'| column -t #make it pretty
done < <(find . -type f -iname "*SampleA*" -print0) #NULL separated list of SampleA
Responder3
Tentei com o comando abaixo
Passo 1
awk '$3 ~ /transcript/{print $0}' file1|awk '{print $3,substr($12,2,12),substr($NF,2,8)}' > out1
PASSO 2
awk '$3 == "transcript" {print substr($NF,2,8)}' file2 > out2
ETAPA 3
paste out out1.txt | awk 'BEGIN{print "Type transcript_id SampleA SampleB"}{print $0}'
Output
Type transcript_id SampleA SampleB
transcript MSTRG.7542.2 0.000000 1.000000
transcript MSTRG.7542.6 0.000000 3.000000
transcript MSTRG.7542.5 0.000000 0.000000