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

Мне нужна помощь для преобразования 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») и перемещается вниз по файлу, если нет … пока я не встречу правильную пару

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 
  • Изменить файл в / etc с помощью сценариев оболочки?
  • как использовать sed, когда переменная содержит «/» в нем?
  • Как удалить формат даты
  • Почему мои одиночные кавычки исчезают при подстановке с sed
  • вопрос о совпадении пробелов
  • sed, grep или tr, которая возвращает только латинские символы из файла UTF-8
  • Как удалить несколько строк в каждом вхождении в файл?
  • список файлов в каталоге без перечисления в текущем каталоге
  • Почему эта замена регулярных выражений не работает?
  • Замена значений сущности XML положительным обратным знаком
  • Отфильтруйте пути из текстового файла, который глубже, чем их непосредственный предшественник
  • Как найти и заменить только определенное слово (которое находится в конце файла) с помощью команды оболочки?
  • Linux и Unix - лучшая ОС в мире.