grepping конкретная матрица и печать в одной строке

У меня есть один файл, содержащий ключевые слова word1 и word2 а под word2 есть матрица как file.dat

  position1: [ 0.0000000, 0.0000000, 0.0000000 ] word1: 0.0000000 band: - # 1 word2 : 0.32015595 0.18484212 0.00000000 0.00000000 0.36968424 0.00000000 0.00000000 0.00000000 0.08286072 position2: [ 0.5000000, 0.0000000, 0.0000000 ] word2: 0.0000000 band: - # 1 word2 : 0.45015595 0.53484212 0.00000000 0.00000000 0.36968424 0.00000000 0.00000000 0.00000000 0.02476072 . . 

Теперь я хочу сделать файл формата

 position1 word1 word2 position2 word1 word2 . . 

но здесь матрица word2 в одной строке как

 0.0000000 0.0000000 0.0000000 0.0000000 0.32015595 0.18484212 0.00000000 0.00000000 0.36968424 0.00000000 0.00000000 0.00000000 0.08286072 

я использовал оценку

 awk '/ position | word1 | word2/ {w=w "$2" } END {print w} 

но это не дает ожидаемого результата, кто-нибудь может мне помочь? Спасибо

One Solution collect form web for “grepping конкретная матрица и печать в одной строке”

 $ awk -F': ' '/position[0-9]+:|word[0-9]+:/ {w=w" "$2 }; /^[0-9. ]+$/ { w=w" "$0 }; /^[[:blank:]]*$/ || eof {if (w) {gsub(/,/,"",w);print w;w=""}}' muthu.txt [ 0.0000000 0.0000000 0.0000000 ] 0.0000000 0.32015595 0.18484212 0.00000000 0.00000000 0.36968424 0.00000000 0.00000000 0.00000000 0.08286072 [ 0.5000000 0.0000000 0.0000000 ] 0.0000000 0.45015595 0.53484212 0.00000000 0.00000000 0.36968424 0.00000000 0.00000000 0.00000000 0.02476072 

Альтернативно, с (IMO) немного лучше форматирование:

 $ awk -F': ' '/position[0-9]+:/ {p=$2 }; /word[0-9]+:/ {w=$2}; /^[0-9. ]+$/ { if (!w2) { w2="[" }; w2=w2" ["$0" ]" }; /^[[:blank:]]*$/ || eof { l=p" "w" "w2; gsub(/ +/," ",l); gsub(/,/,"",l); if (l ~ /^[[:blank:]]*$/) {next}; print l" ]"; p=w=w2="" }' muthu.txt [ 0.0000000 0.0000000 0.0000000 ] 0.0000000 [ [ 0.32015595 0.18484212 0.00000000 ] [ 0.00000000 0.36968424 0.00000000 ] [ 0.00000000 0.00000000 0.08286072 ] ] [ 0.5000000 0.0000000 0.0000000 ] 0.0000000 [ [ 0.45015595 0.53484212 0.00000000 ] [ 0.00000000 0.36968424 0.00000000 ] [ 0.00000000 0.00000000 0.02476072 ] ] 

Оба они предполагают, что входные данные находятся в параграфах, разделенных 1 или более пустых строк.

  • Моя первая оболочка, которая подсчитывает строки в каждом файле
  • Как написать логику повтора в скрипте, чтобы продолжить повторную попытку до 5 раз?
  • С помощью сценария оболочки с jstest, как я могу заставить геймпад взаимодействовать с моим скриптом?
  • Скрипт оболочки Unix, параметры с пробелами
  • Как проверить ввод соответствует определенному формату
  • Как написать скрипт для проверки заданий ошибок и автоматического повторного отправки?
  • Портативный способ настройки исполняемого файла, вызванного скриптом
  • захватить идентификатор процесса, который вызвал функцию внутри функции
  • Создание нескольких сценариев с разными именами файлов
  • команда не найдена и синтаксическая ошибка возле неожиданного токена
  • Выход из скрипта, который перезапускает приложение
  • Как эхо / напечатать последнюю итерацию в этом цикле
  • Linux и Unix - лучшая ОС в мире.