Bash用另一个字符串替换空格和字符串结尾

时间:2013-09-23 12:48:04

标签: linux string bash replace

嗨,我希望有人能帮忙解决问题,

我需要从文本文件中获取某些值,并将它们转换为整齐的文档输出。我有以下代码来获取值:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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