Dezimalstellen in der Spalte abrunden/kürzen

Dezimalstellen in der Spalte abrunden/kürzen

Es scheint eine Reihe von netten und einfachen Methoden zu geben, um alle Zahlen in einer Spalte auf eine Dezimalstelle zu runden, indem man printf von awk oder sogar printf von bash verwendet. Ich kann jedoch keine ebenso einfache Methode finden, um alle Zahlen in einer Spalte einfach auf eine Dezimalstelle zu reduzieren (aber nicht aufzurunden). Die einfachste Methode zum Sortieren wäre im Moment, auf zwei Dezimalstellen zu runden und dann das letzte Zeichen aus jeder Zeile in Spalte 1 zu entfernen. Hat jemand eine bessere Methode dafür? Ein Beispiel für Eingabe und Ausgabe wäre wie folgt:

Eingang

123.434    
1456.8123  
2536.577    
345.95553  
23643.1454  

Ausgabe

123.4    
1456.8  
2536.5    
345.9  
23643.1 

Antwort1

einfach genug mitgrep

$ 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
  • ^Zeilenanfang
  • [0-9]*null oder mehr Ziffern
  • \.Übereinstimmung mit wörtlichem Punktzeichen
  • [0-9]eine Ziffer abgleichen
  • da -odie Option von grepverwendet wird, wird nur der übereinstimmende Teil gedruckt, wodurch die restlichen Zeichen effektiv entfernt werden

Wenn es andere Spalten gibt, verwenden Siesed

$ 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
  • -EErweiterte reguläre Ausdrücke verwenden
  • Das erforderliche Muster wird erfasst ()und \1im Ersetzungsabschnitt verwendet.
  • [0-9]*nachdem die Erfassungsgruppe gelöscht wurde

Weiterführende Literatur:

verwandte Informationen