1

I need to do some processing on the list of .so loaded by a process. I tried cut with space as a delimiter but I didn't succeed. How to correctly pipe the output of cat /proc/PID/maps into cut to get the last field ?

boredaf
  • 181

3 Answers3

2

Getting the last field often is a bit tricky. Options are

awk '{print $NF}' /proc/PID/maps

(note that awk returns the last field with an entry, this will return 0 instead of an empty field for inode=0 entries)

or double-reversing a line with selecting the first field in between:

rev /proc/PID/maps | cut -d' ' -f1 | rev

Use grep to match characters except for space, then match till the end of line:

grep -o '[^ ]*$' /proc/PID/maps
FelixJN
  • 13,566
1

You can rely on maps’ fixed padding:

cut -c74- /proc/.../maps

(on 64-bit platforms).

Extracting the last field in all cases, e.g. with awk '{ print $NF }', is misleading with maps since lines can omit the backing file or use (“[heap]” etc.) entirely.

Stephen Kitt
  • 434,908
-1

Cut is a bit limited. If you have in file, file: 12345 abcde 12438 you can parse it with cat file | awk '{print $2}' to get abcde which you can pipe or redirect.

Brian
  • 158