Работа с столбцами – 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', и он отлично работает.

Теперь все, что я хочу, это два средних столбца. Я использовал 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, которая выполнит это. Но моя проблема в том, что мне нужно только это сделать в первом столбце. Я не совсем уверен, как я могу редактировать только один столбец и не потерять связь между 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 .

Только пример sed :

 sed -r '\=1/g23=!d; s/[^ ]* *//; s/ *[^ ]* *$//; s/(..)\.(..)/:\1:\2:/g; s/::/:/' 

Если ваш ввод содержит вкладки вместо пробелов, вы должны отрегулировать выражения.