似乎有许多简洁的方法可以使用 awk 的 printf 甚至 bash 的 printf 将列中的所有数字四舍五入到小数点后一位。但是,我找不到同样简单的方法来将列中的所有数字减少到小数点后一位(但不向上舍入)。目前排序的最简单方法是四舍五入到小数点后两位,然后删除第 1 列中每一行的最后一个字符。有人有更好的方法吗?输入和输出示例如下:
输入
123.434
1456.8123
2536.577
345.95553
23643.1454
输出
123.4
1456.8
2536.5
345.9
23643.1
答案1
很容易与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
^
行首[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
-E
使用扩展正则表达式- 所需的模式在替换部分中捕获
()
并使用\1
[0-9]*
捕获组被删除后
进一步阅读: