##Get input and output from command line args <- commandArgs(TRUE) inputfilename=args[1] outputfilename=args[2] blastdata<-read.table(inputfilename) output<-data.frame() for (query in levels(blastdata[,1]) ){ ##Build querylist containing all results for this query indexes<-which(blastdata[,1]==query) querylist<-blastdata[indexes,] ##Find best match (minimum evalue) ##Note: E value is column number 13 bestmatchindex=which.min(querylist[,13]) ##Add best match line to dataframe of outputs output=rbind(output,querylist[bestmatchindex,]) } write.table(output,file=outputfilename,sep="\t",quote=FALSE,row.names=FALSE,col.names=FALSE)