#! /bin/bash
#version 0.0...1 !! ..not elegant but works..
# Blast results made easier.
# This script extracts the information contained in the .htm page output
# of Blast (http://www.ncbi.nlm.nih.gov/blast), writing a simpler table
# in html format, that you can for example load on a spreadsheet
# (openoffice or excel - if you really want it).
#
# Usage :
# ./blast2table INPUT OUTPUT
# where:
# INPUT = input file,
# that must be the .htm saved blast webpage with the results
# OUTPUT = output file where the table will be saved, in html format.
# It will have automatically the .html extension
#
#
# Note if this is the FIRST TIME time you use this !
# you need to convert this file into an executable file before running it,
# So the first thing to do is to type:
#
# chmod u+x blast2table.sh
#
# --------------------------------------------------------------------------
# 1001miglia.blogspot.com
# ![[use modify distribute cite]]!
# numero di righe dove compare Accession
grep -n Accession $1 | cut -d: -f1 > grep.1
# numero di samples nella pagina html
ntot=$(grep -n Query= $1 | awk 'END {print NR}')
# nomi dei samples, campo dopo Query= , scritto in file grep.2
awk '/Query=/{print $2}' $1 > grep.2
# trova il campo relativo a Length= e lo manda al file grep.3
grep -A1 Query= $1 | grep Length= | cut -d= -f2 > grep.3
# righe (+2) dove finiscono i titoli di ogni sample (Links), al file grep.4
grep -n Links $1 | cut -d: -f1 > grep.4
# crea il file aaa.tmp.1 e inserisce la prima linea per la tabella html
echo \<table\> > aaa.tmp.1
# riga della prima ripetizione di Accession nel file html :
n1=$(awk 'NR==1' grep.1)
# riga prima ripetizione Links
n1a=$(awk 'NR==1' grep.4)
# taglia via il file html prima della riga n1 e dopo n1a, mette in aaa.tmp.1.
# ci sono i titoli da Accession a Links piu' quelli aggiunti da me Query Length
awk 'NR>='$n1' && (NR<='$n1a'+2)' $1 >> aaa.tmp.1
sed 's/<table>/& <th>Query<\/th><th>Length<\/th>/' <aaa.tmp.1 > aaa.tmp.1a
mv aaa.tmp.1a aaa.tmp.1
# file originale tagliato dopo i primi titoli :
#awk 'NR>'$n1a'' $1 > aaa.tmp.2
for i in $(seq 1 $ntot)
do
#num riga con i-esima ripetizione di Links
n6=$(awk 'NR=='$i'' grep.4)
# taglia via dal file html prima di n6
awk 'NR>'$n6'+2' $1 > aaa.tmp.2
# num di linea aaa.tmp.2 finisce la prima tabella da cui prendere valori :
n2=$(grep -n -m1 \</table\>\</div\> aaa.tmp.2 | cut -d: -f1)
# taglia via aaa.tmp.2 dopo la riga n2
awk 'NR<'$n2'' aaa.tmp.2 > aaa.tmp.3
# nome del sample i-esimo:
n3=$(awk 'NR=='$i'' grep.2)
echo "Found sample number "$i" , named "$n3
# length del sample i-esimo :
n4=$(awk 'NR=='$i'' grep.3)
# agiunge le righe di query e length :
sed 's/<td class="l">/<td>'$n3'<\/td><td>'$n4'<\/td>&/' <aaa.tmp.3 >> aaa.tmp.1
done
# finisce la tabella html
echo \</table\> >> aaa.tmp.1
# output file :
mv aaa.tmp.1 $2.html
rm aaa* grep*
June 2, 2008
Blast results made easier
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment