-1

i have this string:

4017de9511f7    workflow-engine-ms    0.12%     4.609MiB / 7.574GiB  0.06%         29MB / 15.8MB     4.1kB / 0B          13

I have to extract the number 4.609, how can I do it in bash? thx!!

Rudi
  • 19,366
  • 3
  • 55
  • 77

3 Answers3

1

A simple way using awk and sprintf would be:

awk '{val=sprintf ("%g",$4); print val}' file
4.609

Using the "%g" conversion specifier, simply converts the 4.609 portion of the 4th field, ignoring the MiB characters.

David C. Rankin
  • 81,885
  • 6
  • 58
  • 85
0

If the format does not change, you can use sed -e 's# *# #g' | cut -d\ -f4 | cut -dM -f1 to extract the value.

The sed joins subsequent spaces into one, the first cut extract the 4.609MiB field, and the second one strips of the MiB.

Rudi
  • 19,366
  • 3
  • 55
  • 77
0

If by 'I have this string' you mean, you have it in some file and you need to grab first match of X.XXX Mib (or GiB, or kB), I've solved that like this:

echo "4017de9511f7    workflow-engine-ms    0.12%     4.609MiB / 7.574GiB  0.06%         29MB / 15.8MB     4.1kB / 0B          13" > test 

to prepare test file, and

grep -Po "[0-9\.]+(?=(Mi|Gi|k))" test | head -1

to find matching string