スイッチからいくつかの情報を取得するexpecスクリプトによって生成されたテキストファイルを解析しようとしています。
出力例は次のとおりです。
192 0000.0000.0000 1/g23 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
テキストファイルには、興味のない他の多くのジャンクが含まれています。スイッチ番号とポート(上記の例では「1 /g23」)を含む行のみが必要です。
ファイルにgrepを実行して、パターン「/g」を含む行を抽出しました。
これはうまく機能します。
これで、真ん中の2つの列だけが必要になります。
awkを使用して列を印刷しました。
0000.0000.0000 1/g23
これで、「。」に乗ってみたいと思います。
sedはこれで問題なく動作しました
000000000000 1/g23
ここから、最初の列のみをMACアドレス形式に変換したいと思います。
So this
000000000000 1/g23
Becomes this
00:00:00:00:00:00 1/g23
これを実現するsedコマンドを見つけることができました。しかし、私の問題は、最初の列でのみ実行する必要があることです。 1つの列だけを編集して、MACとポート間の関連付けを失わないようにする方法がよくわかりません。
grep -e "/g" switch6output | awk '{print $2,$3}' | sed 's/.//g' | sed 's/../&:/g;s/:$//'
これは本当にばかげたやり方だと思いますが、私が思いついた最高の方法でした。 MACとポートの関連付けを失うことなく、必要なことを達成できるより信頼性の高い方法はありますか?
ありがとうございます。
承認された回答:
awkを直接使用するだけです:
awk '//g/ {
gsub(/./, "", $2)
gsub(/../, "&:", $2)
sub(/:$/, "", $2)
print $2,$3
}'
このソリューションでは、grep
は必要ありません また、sed
。