awk减少单个多个输入值的小数

时间:2013-12-04 09:10:26

标签: bash awk

我想转换以下内容

82.77, 69.30, 43.75, 33.44, 26.88, 26.83, 24.89, 24.88, 24.74, 23.07, 19.31

82.8, 69.3, 44.0, 33.4, 26.8, ...

我认为awk似乎是这样做的简单方法。以下内容适用于单个输入值

echo 123.45567 | awk '{printf("%.1f\n", $1)}'

如何使用awk空格分隔符为上述多个输入值执行此操作,或者有更好的方法吗?昨天我尝试使用java script无法正常工作。

4 个答案:

答案 0 :(得分:2)

使用awk,您可以遍历所有字段。

awk '{for (i=1;i<=NF;i++) printf("%.1f, ",$i);print ""}' file
82.8, 69.3, 43.8, 33.4, 26.9, 26.8, 24.9, 24.9, 24.7, 23.1, 19.3, 17.5,

答案 1 :(得分:2)

像这样使用:

s='82.77, 69.30, 43.75, 33.44, 26.88, 26.83, 24.89, 24.88, 24.74, 23.07, 19.31, 17.51.'
awk '{printf("%.1f\n", $1)}' RS=, <<< "$s"
82.8
69.3
43.8
33.4
26.9
26.8
24.9
24.9
24.7
23.1
19.3
17.5

答案 2 :(得分:2)

只需遍历每个字段:

$ awk  -F', ' '{for(i=1;i<=NF;i++)printf "%.1f%s",$i,(i==NF?RS:FS)}'

通过将字段分隔符设置为, (逗号后跟空格),输出格式将保留在输出中。条件(i==NF?RS:FS)检查我们是否已到达记录中的最后一个字段并相应地分离输出。

答案 3 :(得分:1)

  

问:如何使用awk的空格分隔符为上述多个输入值执行此操作

A:尝试将 RS 记录分隔符设置为空格:

echo '82.77 69.30 43.75 33.44 26.88 26.83 24.89 24.88 24.74 23.07 19.31 17.51' \ 
| awk 'BEGIN{RS=" "} {printf("%.1f\n", $1)}' 
82.8
69.3
43.8
33.4
26.9
26.8
24.9
24.9
24.7
23.1
19.3
17.5