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 }'まだ最初の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.
        }
'

関連情報