嗨,我希望有人能帮忙解决问题,
我需要从文本文件中获取某些值,并将它们转换为整齐的文档输出。我有以下代码来获取值:
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
答案 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)
使用bash
和paste
:
$ 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