我有这样的文件。
Column1 Column2
-3500 value1
-3480 value2
-3460 value 3
9920 value 50
9940
9960
10000
10020
40000 Last value
看看这个例子:
awk 'NR>1{$1=$1-4.91}1' file
Column1 Column2
-3504.91 value1
-3484.91 value2
-3464.91 value 3
9915.09 value 50
9935.09
9955.09
9995.09
10015.1
39995.1 Last value
我想拥有正确的值,而不是这样的四舍五入:
Column1 Column2
-3504.91 value1
-3484.91 value2
-3464.91 value 3
9915.09 value 50
9935.09
9955.09
9995.09
10015.09
39995.09 Last value
我试图从第一列中减去常量值4.91
。一切正常,直到9980
,但从10000
开始,awk仅从数据中减去4.9
,并使值0.01
小于原始值。我认为它是四舍五入的最多一些小数位,但我不想要舍入值。任何人都可以建议我解决方法..
欢迎来自shell脚本或Perl的任何其他建议。
答案 0 :(得分:2)
可以在perl中完成:
perl -pe 's/^([-0-9]+)/$1 - 4.91/e' your_file
详细说明:
-p
逐行读取文件并将其打印-e
运行包含$_
s/.../.../e
- 用表达式替换regexp
^([-0-9]+)
- 匹配任何数字和/或-
符号。还捕获匹配的片段。$1 - 4.91
- 使用regexp捕获的值进行工作。答案 1 :(得分:0)
以下是使用awk
执行此操作的方法:
您只需使用printf
函数设置您喜欢的小数。
awk 'NR>1{printf "%.2f\n",$1-4.91}' file
-3504.91
-3484.91
-3464.91
9915.09
9935.09
9955.09
9995.09
10015.09
39995.09
答案 2 :(得分:0)
$ awk 'BEGIN{CONVFMT="%.2f"} NR>1{$1=$1-4.91}1' file
Column1 Column2
-3504.91 value1
-3484.91 value2
-3464.91 value 3
9915.09 value 50
9935.09
9955.09
9995.09
10015.09
39995.09 Last value
或者如果您愿意:
$ awk 'NR>1{$1=sprintf("%.2f",$1-4.91)}1' file
Column1 Column2
-3504.91 value1
-3484.91 value2
-3464.91 value 3
9915.09 value 50
9935.09
9955.09
9995.09
10015.09
39995.09 Last value