我想转换以下内容
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无法正常工作。
答案 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