我目前通过使用以下方法得到了我想要的结果:
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.
}
'