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

Мне нужна помощь для преобразования 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 для печати с первой строки до строки, содержащей последнее вхождение шаблона?
  • Использовать данные канала Pandoc с AWK
  • Объединение файлов по 4 столбца каждый, в 4 файла для каждого столбца
  • Как заменить строку содержимым файла и вокруг содержимого некоторым текстом?
  • SED, чтобы найти и заменить точное слово, начинающееся с $
  • Заменить все вхождения символа, кроме первого
  • Как сбить имя файла с помощью SED
  • 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 - лучшая ОС в мире.