2012-11-02 23 views
1

作爲De Novo的註釋管線的一部分魚類基因組我需要比較BLAST的e值以查看它們是否低於某個閾值。使用bash以科學計數法讀取數字

爲了得到語義正確的我第一次評估在爆炸中輸出的othet一列,並能正常工作是這樣的:

for f in FOLDER/*; do 
myVar=$(head -1 $f | awk '{print $4}') ; 
if [[ $myVar -gt 50 ]]; then echo ..... ;done 

$ 4,然後在整個數值的BLAST輸出列(打長或某事)

然而,當我嘗試將腳本更改爲與E值的工作,有一些問題與科學記數法等的解釋......

我想是什麼這個:

for f in FOLDER/*; do 
myVar=$(head -1 $f | awk '{print $11}') ; 
if [[ $myVar -gt 1.0e-10 ]]; then echo ..... ;done 

其中11美元指向每個命中的e值。

這可以在bash中以不麻煩的方式完成嗎?

+1

Bash只能處理整數。切換到更強大的Perl語言。 – choroba

+0

我很害怕那個...可能必須把它翻過來...... :)謝謝! –

回答

2

隨着awk,它是可能的:

for f in FOLDER/*; do awk '$11 < 1e-10 {print $11}' "$f"; done 

這並不需要先定義的變量。

+0

我也是awk的粉絲。爲了以防萬一,我會提到awk(和其他語言),通過它所構建的數學庫,對真正大的整數值的精度有限制。聽起來它不適用於你正在做的事情,但從不傷害做一些防禦性測試。另外,在x之後接受你自己的答案是完全合法的?小時,通過增加你的代表點。祝你好運。 – shellter

+0

謝謝。會做一些測試,但不要認爲小細節會導致任何問題。 –

+0

您可能希望在'print $ 11'之後將'; exit'添加到Awk腳本,以使其僅查看第一行。 – tripleee