Ergebnis

Ergebnis

Ich habe diese folgende Zeile

scalar TestDmaMac4.sink.udpApp[0]   throughput:last     11730.559888477

11730Ich möchte nur aus dieser Zeile extrahieren . Wie kann ich das mit machen grep? Ich möchte die Zahl nach dem Komma ignorieren und brauche nur die Ziffern vor dem Komma.

(Hinweis: Es gibt eine{Leertaste}{Tab}Folge, die jeweils trennt udpApp[0], throughput:lastund die Zahl, die mit beginnt 11730.)

Antwort1

Der folgende reguläre Ausdruck gleicht jede Gleitkommazahl im Format ab [0-9].[0-9]und gibt den ganzzahligen Teil dieser Gleitkommazahl zurück.

$ a="scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477"
$ egrep -o '[0-9]+[.][0-9]' <<<"$a" |egrep -o '[0-9]+[^.]'  #First grep will isolate the floating number , second grep will isolate the int part.
11730
$ perl -pe 's/(.*?)([0-9]+)(\.[0-9]+.*)/\2/' <<<"$a"  #using the lazy operator ?
11730
$ sed -r 's/(.*[^0-9.])([0-9]+)(\.[0-9]+.*)/\2/' <<<"$a"  #sed does not have lazy operator thus we simulate this with negation
11730

Zu Testzwecken habe ich den obigen regulären Ausdruck auch in einem anderen String mit einer Gleitkommazahl an einer anderen Position ohne führendes Leerzeichen ausprobiert:

$ c="scalar throughput:last11730.559888477 TestDmaMac4.sink.udpApp[0]"
$ egrep -o '[0-9]+[.][0-9]' <<<"$c" |egrep -o '[0-9]+[^.]'
11730
$ perl -pe 's/(.*?)([0-9]+)(\.[0-9]+.*)/\2/' <<<"$c"
11730
$ sed -r 's/(.*[^0-9.])([0-9]+)(\.[0-9]+.*)/\2/' <<<"$c"
11730

Antwort2

l='scalar TestDmaMac4.sink.udpApp[0]   throughput:last     11730.559888477'
read -r -a a <<<"$l"
dc -e "${a[-1]}dX10r^dsa*la/p"

echo "$l" | perl -lane 'print/\d+(?=\.\d+$)/g'

Ergebnis

11730

Antwort3

Verwenden von Grep:

grep -o " [0-9]\{1,\}"

Zu testen:

echo "scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477" | grep -o " [0-9]\{1,\}"

Ergebnisse:

11730

verwandte Informationen