arpscan 获取 Mac 地址,抑制前 2、后 3 行

arpscan 获取 Mac 地址,抑制前 2、后 3 行

我目前通过使用以下方法得到了我想要的结果:

arp-scan -I eno1 -l | cut -f2-3 | tr [':lower:'] [':upper:'] | sed 1,2d | head -n -3

有人告诉我,我产生了太多进程,这只是一种糟糕的形式。但没有告诉我什么是“良好的形式”。

我可以接近,arp-scan -I eno1 -l | awk '{ print $2 $3 }'但我仍然得到前两行和最后三行。有没有办法使用更少的管道来实现我想要做的事情?在完美的世界中,我得到了以下列表:

XX:XX:XX:XX:XX:XX (<MANUFACTURER>)

其中 MAC 地址和制造商之间的差距是制表符。此外,它必须返回大写的 MAC 地址,因为它与文件进行比较以确定我的家庭网络上设备的用户。

答案1

尝试(未经测试)

arp-scan -I eno1 -l | awk '{$0 = toupper ($0); CIRCBUF[NR%5] = $2 "\t" $3} NR > 5 {print CIRCBUF[(NR-3)%5]}'

编辑:评论awk部分

awk '
        {$0 = toupper ($0)              # convert each line to uppercase
         CIRCBUF[NR%5] = $2 "\t" $3     # fill circular buffer with fields 2 & 3
                                        # buffer index cycles every 5 lines
        }
NR > 5  {print CIRCBUF[(NR-3)%5]        # start printing at line 3 (6 - 3) and
                                        # stop 3 lines before end.
        }
'

相关内容