Работа с столбцами – 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 и портов?

Спасибо.

2 Solutions collect form web for “Работа с столбцами – awk и sed”

Просто используйте 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/::/:/' 

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

  • Как распечатать все, кроме Nth, до последней строки в sed?
  • Лучший способ запустить серию из семи одинаковых команд в sed?
  • Извлечение нескольких экземпляров текста между двумя строками
  • Не запускать этот sed при сопоставлении строки?
  • Как найти, на каком устройстве находится файл (и использовать его в скрипте)?
  • Манипулировать некоторые данные с ограниченным разделением в полезный CSV
  • Заменить значение в таблице
  • Posix Character Устанавливает разницу между ] и ]?
  • Как удалить первый символ в определенном столбце, используя sed
  • Печать текста между многострочными разделителями
  • Удалите n-ю строку из сопоставленной строки (которая встречается только один раз в файле)
  • Linux и Unix - лучшая ОС в мире.