Объедините две строки в один выбор выбранных слов из обоих

Мне нужна помощь для преобразования file1, так что у него есть три слова в каждой строке, где сначала второе слово из строки, начинающейся с «ROBO», а второе слово – второе слово из строки, начинающейся с «1»), и, наконец, третье слово четвертое слово из строки, начинающейся с '1)' . См. Пример ниже …

$cat file1 ROBO lab1 - Topology: 1) 10.195.41.1 10.195.41.255 comment1 ROBO lab2 - Topology: 1) 10.95.4.1 10.95.4.254 comment2 

к:

 lab1 10.195.41.1 comment1 lab2 10.95.4.1 comment2 

Я закончил со следующим:

 sed 'N;s/\n/ /' file1| awk '{ if ($6 ~ /^10\./) print $2 " " $6}' 

но он ломается, когда у меня есть что-то вроде этого:

 ROBO lab1 - Topology: ROBO lab1 - Topology: 1) 10.195.41.1 10.195.41.255 comment1 ROBO lab2 - Topology: 1) 10.95.4.1 

Мне нужно контролировать, что первая строка начинается с «ROBO», а вторая начинается с «1») и перемещается вниз по файлу, если нет … пока я не встречу правильную пару

  • Использовать sed для форматирования абзацев для латекса
  • Найти строку в одном разделе файла с несколькими разделами
  • Удалить символ между двумя известными строками
  • Добавление значения ко всем столбцам
  • Чтобы посчитать количество совпадений в мега-строке быстро
  • Удалять повторяющиеся строки попарно?
  • С помощью sed я хочу заменить первый блок текста, который соответствует
  • Трубопровод sed для grep не работает должным образом
  • 2 Solutions collect form web for “Объедините две строки в один выбор выбранных слов из обоих”

     $ awk '/^ROBO/ { n = $2 } /^1\)/ { $1 = n; $3 = ""; print }' file1 lab1 10.195.41.1 comment1 lab2 10.95.4.1 comment2 

    Это работает так, как ожидалось, но будет заключать в комментарии любые последовательные пробелы.

    Первая часть извлекает второе слово на любой линии ROBO .

    Вторая часть заменит первое поле ввода любой 1) строки словом из самой последней линии ROBO и освободит третье поле ввода перед печатью измененной записи.

    Для второго набора примерного ввода это дает

     lab1 10.195.41.1 comment1 lab2 10.95.4.1 

    Просто с awk :

    «… конвертируйте файл1 таким образом, чтобы в каждой строке было три слова …»

     awk '/^ROBO/{ printf "%s ",$2 }/^1\)/{ printf "%s %s\n",$2,$4 }' file1 

    Выход:

     lab1 10.195.41.1 comment1 lab2 10.95.4.1 comment2 
    Linux и Unix - лучшая ОС в мире.