2017-04-25 67 views
0

我試圖找到科學計數法中的所有號碼,並將其替換其浮點相當於:解析數學表達式+ gensub

gawk -F' ' ' 
    BEGIN { 
    OFMT = "%.0f" 
    data = "\ 
    6.54321e2\n\ 
    6.543212\n\ 
    .\n\ 
    454.\n\ 
    c. 5.54321e2\n\ 
    5.54321e2 1.54321e3\n\ 
    4.54321e2 8.34e+4\n\ 
    4.543212 5.54321e2\n\ 
    3.23e3" 
    regex = "([0-9]+).([0-9]+)e([0-9]+)" 
    output = gensub(regex, "\\1.\\2e\\3", "G", data) 
    printf("%.3f", output) 
    }' "$1" 

更換printf("%.3f", output)print b似乎很正常,但發現號碼被替換,但printf參數output未按原樣分析。 strtonum()沒有改變任何東西,我錯過了什麼?

正如您在最後看到的那樣,在腳本參數$1下分配文件時也出現了問題。我是否應該像data這樣的變量或gensub()中的變量指向該文件。

預先感謝任何幫助:)

回答

0

不知道什麼$1是,但你可以做以下

echo "data contents here" | 
awk '{for(i=1;i<=NF;i++) if($i+0==$i) $i=sprintf("%.3f",$i)}1' 

或者把你的數據在一個文件中,並使用

awk '{for(i=1;i<=NF;i++) if($i+0==$i) $i=sprintf("%.3f",$i)}1' file 

它會將空白標準化爲副作用。

+0

這樣做的工作,非常感謝:) – pedrollo22