Разделить файлы на основе поиска шаблонов. Разделить имя файла с помощью шаблона, который мы искали

У меня есть файл, как показано ниже:

###PSTERS### LINE1 LINE2 ###PSTADS### LINE3 LINE4 ###PSTEEE### LINE5 LINE6 

Мне нужно сгенерировать 3 файла, как будто (имена файлов – это шаблон, который мы ищем):

PSTERS.txt:

 LINE1 LINE2 

PSTADS.txt:

 LINE3 LINE4 

PSTEEE.txt:

 LINE5 LINE6 

Как я могу это сделать? Я попробовал сценарий ниже, но он не работает с синтаксической ошибкой awk:

 #!/bin/bash #This script will take 2 parameters as input. # 1. Source File Path # 2. Source File name as input SOURCE_PATH=$1 SOURCE_FILE=$2 #Get the list of patterns we need to check from the Main source file cd $SOURCE_PATH pattern_list=`grep -e '^\#' $SOURCE_FILE | cut -d'#' -f4` echo ${pattern_list} #Split the Source File for each pattern in the variable pattern_list for pattern in ${pattern_list} do cd $SOURCE_PATH awk '/\#\#\#'$pattern'/{x='$pattern';next}{print > x;}' $SOURCE_FILE done 

2 Solutions collect form web for “Разделить файлы на основе поиска шаблонов. Разделить имя файла с помощью шаблона, который мы искали”

Вы принимаете очень сложный подход. Нет необходимости в скрипте оболочки, это однострочный awk :

 awk '{if(gsub(/#+/,"")){name=$0;}else{print > name".txt"}}' file 

gsub – это «глобальная замена». Таким образом, это означает, что «если строка имеет номер # , удалите их (замените ничем) и установите переменную« имя »в содержимое строки». Так как теперь строка будет оставлена ​​после удаления # , name будет шаблоном. Затем, если строка не соответствует # (если сбой замены), напечатайте строку в файл, имя которого является текущим значением name и .txt .

Если вам все еще нужен сценарий оболочки, просто используйте:

 #!/bin/bash - #This script will take 1 parameter as input: the target file path targetFile="$1" targetDir=$(dirname -- "$targetFile") targetFile=$(basename -- "$targetFile") cd -P -- "$targetDir" || exit awk '{if(gsub(/#+/,"")){name=$0;}else{print > name".txt"}}' < "$targetFile" 

Мы можем использовать relative addressing редактора ed чтобы снять это.

Задача включает извлечение номера строки всех # строк во входном файле в первый проход. Затем мы создаем серию команд ed чтобы выполнить работу. Правая сторона отображает содержимое пространства шаблонов, когда оно формируется с помощью скринсейвера sed

 sed -e '$s/.*/$/;$q;/^#/!d;=' inputfile | sed -e ' N;N;h; # ps: 1\n###PSTERS###\n4$ s/^[1-9][0-9]*/&+/; /\$$/!s/$/-/; # ps: 1+\n###PSTERS###\n4-$ s/\n\(.*\)\n\(.*\)/,\2w \1.txt/; # ps: 1+,4-w ###PSTERS###.txt$ s/#//gp;g; # ps: 1+,4-w PSTERS.txt s/.*\n/\n/; $!D; s/.*/q/ ' | ed -s - inputfile 
  • Как разбить список имен файлов в наборах 5 ГБ?
  • изменить файл с помощью awk или sed
  • Найдите шаблон в файле и переместите его в новые файлы по одному
  • Выполните условие IF из результата, который мы получаем с удаленного сервера
  • Присоединяйте каждый столбец с помощью sed или awk
  • awk: печатать строки после матча до конца файла
  • Удалите последовательные строки в CSV с повторяющимися значениями в одном поле, но сохраните последнюю строку
  • Объедините две строки в один выбор выбранных слов из обоих
  • Используйте список строк, чтобы заменить параметр sql, распечатывающий весь файл для каждой замены
  • Разделите элементы столбца на столбец с одним элементом
  • Использование gensub не заменяет соответствия
  • Interesting Posts

    Перемещение правой кнопки с помощью синаптики

    пакеты фильтров определенного процесса с использованием iptable

    Выведенный процесс не читается с stdin

    Есть ли разница между u и c в mknod

    Как изменить каталог загрузки пакета Synaptic Package Manager, когда я выбираю «скачать только»?

    Использование команды sed для соответствия текста в определенном блоке текста

    Подробная информация о open socket на Solaris

    Команда sed: N не читает одну строку

    Как настроить внешние IP-адреса для гостей LXC?

    Bash: #: команда не найдена

    VNC через маршрутизатор Raspberry Pi с использованием переадресации портов

    Создание пользователя, имеющего только доступ к папке и подпапке, который присутствует у другого пользователя той же Системы

    udev не создает постоянную символическую ссылку с использованием ID_PATH

    Как отправить журналы аудита с помощью audisp-remote и получить их с помощью netcat

    Как запустить сценарии запуска на Amazon linux?

    Linux и Unix - лучшая ОС в мире.