GNU/Linux >> Belajar Linux >  >> Linux

Bekerja Dengan Kolom – Awk Dan Sed?

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 .


Linux
  1. Mengekstrak dan menampilkan data dengan awk

  2. Hitung Banyaknya Baris Dengan Sebuah String Terjadi N Kali Dalam Beberapa Kolom?

  3. Bekerja dengan filter email dan filter email global di cPanel

  1. Bagaimana cara memotong n kolom pertama dan n terakhir?

  2. sed e dan g flag tidak bekerja bersama

  3. Bagaimana cara mengubah file di tempat menggunakan awk? (seperti halnya sed -i)

  1. Bekerja dengan Input Output dan Error Redirection di Linux

  2. SSH – Menghasilkan dan Bekerja dengan kunci ssh

  3. Tambahan Dengan 'sed'?