2013-09-23 54 views
2

您好我希望有人可以用問題幫助,猛砸用另一個字符串

我需要從一個文本文件中獲取一定的值,並將其轉換的東西整齊的文檔輸出代替空白和字符串的結尾。我有以下的代碼來獲得值:

values=$(awk '/PARAMETER/ {getline ; getline; print ($(NF-6))}' $array) 

這給我的字符串,例如:9.00 5.00 9.00

現在我想這個字符串轉換爲:9.0m,5.0m,9.0m。因此,請忽略第二個小數點並添加m,。值字符串的長度和值可能會有所不同,但始終有兩位小數。

如何快速做到這一點!?

基本上這是我需要分析的文本。特別是我需要的子集1的一個Z值和子集2的一個Z值:

MODEL PARAMETERS : 
Project : Report 
Dataset : xxx 

Number of subsets : 2 
Total number   : 4 

Subset number : 1 
Subset name  : xxx_sub1 
Number   : 4 

NR TYPE      X(m)  Y(m) Z(m) Volume Pressure CluNo Activ Group 
--- --------------------- ------ ------ ----- ------- -------- ----- ----- ------ 
    1 Type text     0.00 -10.40 9.00 2000.0 500.0  0  0  1 
    2 Type text     0.00  -9.60 9.00 1000.0 500.0  0  1  1 
    3 Type text     3.00 -10.40 9.00 1200.0 500.0  1  1  1 
    4 Type text     3.00  -9.60 9.00 800.0 500.0  1  1  1 

Subset number : 2 
Subset name  : xxx_sub2 
Number   : 4 

NR TYPE      X(m)  Y(m) Z(m) Volume Pressure CluNo Activ Group 
--- --------------------- ------ ------ ----- ------- -------- ----- ----- ------ 
    1 Type text     0.00  10.40 15.00 2000.0 500.0  0  0  1 
    2 Type text     0.00  9.60 15.00 1000.0 500.0  0  1  1 
    3 Type text     3.00  10.40 15.00 1200.0 500.0  1  1  1 
    4 Type text     3.00  9.60 15.00 800.0 500.0  1  1  1 

Units : 
    Coordinates  : meter 
    Volume   : cubic cm 
    Pressure   : pascal 

回答

4
awk -v OFS="," '{for(i=1;i<=NF;i++)$i=sprintf("%.1fm",$i)}7' 

上面的一行可以幫助你。檢查測試:

kent$ echo "2000.44 234.88 9.00 5.00 9.00"|awk -v OFS="," '{for(i=1;i<=NF;i++)$i=sprintf("%.1fm",$i)}7' 
2000.4m,234.9m,9.0m,5.0m,9.0m 
+0

感謝那些工作就像一種享受! 7是什麼? – Cnoobplusplus

+0

我會討厭awk awk。難道沒有辦法將OP的原始awk腳本摺疊到這個awk腳本中來製作一個完整的awk程序嗎? – kojiro

+0

@kojiro我也不會'awk | sed | awk | ....'。但OP只給了我們他的命令輸出(awk)。我看不到他原來的輸入。我只是根據他的輸出做了一些工作。如果他提供了更多信息,應該是更好的解決方案。 – Kent

2

使用bashpaste

$ values="9.00 5.00 9.00" 
$ while IFS=, read val; do printf "%.1fm\n" $val; done <<< $values | paste -sd, 
9.0m,5.0m,9.0m 
$ values="1.1000 2.4 3.400 42" 
$ while IFS=, read val; do printf "%.1fm\n" $val; done <<< $values | paste -sd, 
1.1m,2.4m,3.4m,42.0m 
+0

爲什麼不只是'... printf%.1fm,'「$ val」;完成;回聲'而不是粘貼?這不是純粹的bash現在... – kojiro

+0

@kojiro因爲它會添加尾隨','。 – devnull

+0

@kojiro由於'粘貼'? – devnull