向下舍入/截斷列內的小數位

向下舍入/截斷列內的小數位

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

延伸閱讀:

相關內容