Работа с столбцами – 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/::/:/' 

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

  • Выполните вывод parse ls с помощью sed, чтобы получить расположение файлов файлов с определенными именами
  • Как удалить новые строки из ip в качестве вывода?
  • удалить соответствующую фразу из начала файла списка и записать изменения
  • grep шаблон перед другим шаблоном и распечатать все
  • Замена нескольких строк в sed или awk
  • Извлеките уникальную строку из каждой строки, содержащей <string>
  • sed: захват и замена всех данных между последней обратной косой чертой и запятой
  • Заменить только первый символ совпадающего шаблона
  • Знаки sed «e» и «g» не работают вместе
  • Может ли sed сохранить свой вывод в файл?
  • Печать определенного раздела строки при наличии значения триггера
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.