转换数字格式并比较文件

转换数字格式并比较文件

我有一个包含 174 个字段的文件。前 4 个字段如下所示

1|2.3|2.3|34
1|0|0|34
1|0.0|0.0|34
1|11|11|34
1|.3|.3|34
1|-0.00|-0.00|34
1|1.67|1.67|34

我需要将它转换成这样:

1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.30|0.30|34
1|0.00|0.00|34
1|1.67|1.67|34

我使用了以下内容,但最后一个值是1|1.70|1.70|34.

awk 'BEGIN {OFS=FS="|"} {$2=$2+0.00;$3=$3+0.00; print $0 }' file1 > temp1
awk 'BEGIN {OFS=FS="|"} {$2=sprintf("%.2f",$2);$3=sprintf("%.2f",$3);print $0}' temp1 > temp2

答案1

使用numfmtGNU Coreutils 的实用程序:

numfmt --delimiter='|' --field=2-3 --format='%.2f' < file
1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.31|0.31|34
1|0.00|0.00|34
1|1.67|1.67|34

--field=2-3根据您的要求调整字段范围

答案2

你的第二个awk构造几乎是完美的。尝试这个

awk -F'|' 'BEGIN {OFS = FS} {$2 = sprintf("%0.2f", $2+0); $3 = sprintf("%0.2f", $3+0); print $0}'
1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.30|0.30|34
1|0.00|0.00|34
1|1.67|1.67|34

相关内容