列内の小数点以下を切り捨てる

列内の小数点以下を切り捨てる

awk の printf や bash の printf を使って、列内のすべての数値を小数点以下 1 桁に丸める、すっきりとした簡単な方法がいくつかあるようです。しかし、列内のすべての数値を小数点以下 1 桁に減らす (ただし切り上げはしない) だけの、同じように簡単な方法が見つかりません。現時点でこれをソートする最も簡単な方法は、小数点以下 2 桁に丸めてから、列 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 以上の数字
  • \.リテラルドット文字に一致
  • [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]*キャプチャグループが削除された後

参考文献:

関連情報