Karn Kumar Karn Kumar - 3 months ago 9
Python Question

getent hosts to take initial 3 up digit+hostname unix

I need first 3 octets of IP address and the myhosts name, while I am trying to make via cut command but unable to join the host name

$ getent hosts myhosts
172.10.2.32 myhosts.lab.com


anything with awk, sed, cut, python will be okay

$ getent hosts myhosts | cut -d "." -f1,2,3
172.10.2


The output should be:

172.10.2 myhosts.lab.com

Answer

On the first field, remove everything from the last dot:

$ awk '{sub(/\.[^.]*$/,"",$1); print $1, $2}' <<< "172.10.2.32    myhosts.lab.com"
172.10.2 myhosts.lab.com

We have two fields: IP and hostname. The hostname is to be returned without any change, whereas for the IP we want to remove the last block.

To tune the first field $1 we use sub(). This perform replacements using the syntax sub(regexp, replacement [, target]). To remove everything from the last dot, we replace it with the empty string.

And how do we match everything from the last dot? Using /\.[^.]*$/, which means: match a dot and then any kind of characters but a dot until the end of the field.

Comments