Search code examples
awksedipcidr

cidr converter using sed or awk


I have a text file with IP addresses in cidr format. One cidr per line. How do I convert the cidrs to IP ranges i.e start IP - end IP. One IP range per line. Please note the space on either side of the - .


Solution

  • You'd better use ipcalc:

    ipcalc 192.168.0.1/24 -nb | awk '/HostMin/{min=$NF} /HostMax/{max=$NF} END {print min" - "max}'
    192.168.0.1 - 192.168.0.254
    

    A simple script to loop through the file:

    #!/bin/bash
    
    cat file.txt |\
    while IFS= read ip; do
        ipcalc "$ip" -nb |\
        awk '   /HostMin/{min=$NF} 
                /HostMax/{max=$NF} 
                END {print min" - "max}'
    done