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
-o
die Option vongrep
verwendet 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
-E
Erweiterte reguläre Ausdrücke verwenden- Das erforderliche Muster wird erfasst
()
und\1
im Ersetzungsabschnitt verwendet. [0-9]*
nachdem die Erfassungsgruppe gelöscht wurde
Weiterführende Literatur: