GNU/Linux >> Linux の 問題 >  >> Linux

列の操作– AwkとSed?


スイッチからいくつかの情報を取得する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


Linux
  1. awkを使用したデータの抽出と表示

  2. Linuxでの入出力とエラーリダイレクトの操作

  3. 柔軟なキーと値を使用して、sed を使用して構成ファイルを変更するにはどうすればよいですか?

  1. ディレクトリとサブディレクトリで検索して sed に置き換えます

  2. sed e および g フラグが一緒に機能しない

  3. awkを使用してファイルをインプレースで変更するには? (sed -i と同様)

  1. SSH –sshキーの生成と操作

  2. 「sed」を追加しますか?

  3. cPanelでのメールフィルターとグローバルメールフィルターの操作