Saya mencoba mengurai file teks yang dihasilkan oleh skrip exec yang
menarik beberapa informasi dari sakelar.
Berikut adalah contoh keluarannya:
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
File teks memiliki banyak sampah lain di dalamnya yang tidak saya minati. Saya hanya ingin baris yang berisi nomor sakelar dan port – “1/g23” pada contoh di atas.
Saya melakukan grep pada file untuk mengekstrak baris yang berisi pola '/g'
dan itu berfungsi dengan baik.
Sekarang yang saya inginkan hanyalah dua kolom tengah.
Saya menggunakan awk untuk mencetak kolom.
0000.0000.0000 1/g23
Sekarang setelah selesai, saya ingin menggunakan '.'
sed bekerja dengan baik untuk ini
000000000000 1/g23
Dari sini saya hanya ingin mengonversi kolom pertama ke format alamat MAC.
So this
000000000000 1/g23
Becomes this
00:00:00:00:00:00 1/g23
Saya dapat menemukan perintah sed yang akan menyelesaikan ini. Tetapi masalah saya adalah saya hanya perlu menyelesaikannya pada kolom pertama. Saya tidak yakin bagaimana saya dapat mengedit hanya satu kolom dan tidak kehilangan hubungan antara MAC dan port.
grep -e "/g" switch6output | awk '{print $2,$3}' | sed 's/.//g' | sed 's/../&:/g;s/:$//'
Saya yakin ini adalah cara yang sangat bodoh untuk melakukannya, tetapi itu adalah yang terbaik yang bisa saya lakukan. Apakah ada cara yang lebih andal untuk mencapai apa yang saya butuhkan tanpa kehilangan MAC dan asosiasi port?
Terima kasih.
Jawaban yang Diterima:
Cukup gunakan awk secara langsung:
awk '//g/ {
gsub(/./, "", $2)
gsub(/../, "&:", $2)
sub(/:$/, "", $2)
print $2,$3
}'
Dengan solusi ini Anda tidak perlu grep
atau sed
.