向下舍入/截断列中的小数位

Gil*_*les 4 text-processing numeric-data

似乎有许多简洁的方法可以使用 awk 的 printf 甚至 bash 的 printf 将列中的所有数字四舍五入到小数点后一位。但是,我找不到一种同样简单的方法来将列中的所有数字减少到小数点后一位(但不是四舍五入)。目前最简单的排序方法是四舍五入到 2 个小数位,然后从第 1 列的每一行中删除最后一个字符。有人有更好的方法吗?示例输入和输出如下:

输入

123.434    
1456.8123  
2536.577    
345.95553  
23643.1454  
Run Code Online (Sandbox Code Playgroud)

输出

123.4    
1456.8  
2536.5    
345.9  
23643.1 
Run Code Online (Sandbox Code Playgroud)

Sun*_*eep 10

很容易 grep

$ cat ip.txt 
123.434
1456.8123
2536.577
345.95553
23643.1454    

$ grep -o '^[0-9]*\.[0-9]' ip.txt 
123.4
1456.8
2536.5
345.9
23643.1
Run Code Online (Sandbox Code Playgroud)
  • ^ 行首
  • [0-9]* 零个或多个数字
  • \. 匹配文字点字符
  • [0-9] 匹配一个数字
  • 因为使用了-o选项grep,所以只打印匹配的部分,有效地删除剩余的字符

如果还有其他列,请使用 sed

$ cat ip.txt 
123.434 a
1456.8123 b
2536.577 c
345.95553 d
23643.1454 e

$ sed -E 's/^([0-9]*\.[0-9])[0-9]*/\1/' ip.txt
123.4 a
1456.8 b
2536.5 c
345.9 d
23643.1 e
Run Code Online (Sandbox Code Playgroud)
  • -E 使用扩展正则表达式
  • 所需的模式被捕获()\1用于替换部分
  • [0-9]* 捕获组被删除后

进一步阅读: