似乎有許多簡潔的方法可以使用 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]*
捕獲組被刪除後
延伸閱讀: