Bash - find_mac_address.sh

#!/bin/bash

declare -a uplinks

# Iterate through each file in folder extra
for file in $(ls -1 ../extra); do

        # Declare an array uplinks
        declare -a uplinks

        filepath="../extra/$file"

        # For current device $filepath list ports with more than 1 occurence of MAC and store on array uplinks
        for uplink in $(cat $filepath | awk '{ print $3 }' | grep 'gi\|te\|Po' | sort -h | uniq -c | sed s/^[[:blank:]]*//g | grep -v ^1" " | awk '{ print $2 }'); do

                # Append to array
                uplinks+=($uplink)

        done

        echo Switch export file: ../extra/$file

        # Separate each item from array by \| and remove \| from beginning of line.
        # This '\|gi26\|gi27\|gi28' becomes this 'gi26\|gi27\|gi28'
        filter=$(printf '\|%s' "${uplinks[@]}" | sed s/^\\\\\|//g)

        echo Uplink ports filtered out from switch: \'$filter\'

        # The grep -v takes $w a list of uplink ports for OR rule
        eval cat $filepath | grep -v $filter

        #Clear array for next iteration
        uplinks=()

        # Search Switch and store, search Uplink and store, search for $1(MAC) and found print them all
done | awk '/^Switch/ {switch_=$0} /^Uplink/ {uplink_=$0} /'"$1"'/ {print switch_ "\n" uplink_ "\n" $0}'