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

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

###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 
  • Как найти конкретную строку и распечатать всю строку?
  • Нет вывода из inotifywait | AWK
  • Удаление расширения только из первого столбца
  • Добавьте все столбцы отдельно в linux, если первый столбец имеет одинаковые записи
  • Почему awk '{print "Hi, Judy"}' печатает "Hi, Judy" повторно при нажатии Return?
  • Сравнение файлов по строкам в awk с разделителем
  • Обработать столбец с текстом, который имеет пробелы как 1 поле
  • Как объединить два файла на основе соответствия двух столбцов? CSV
  • Согласование многострочного шаблона с помощью sed, awk или grep
  • Заполните пустые строки в определенном столбце значениями
  • простой стол поворота скрипта
  • Упрощение однострочного вызова с помощью sed и нескольких вызовов awk
  • Interesting Posts

    sfdisk не любит разделы – хочу сбросить еще один жесткий диск для восстановления программного RAID

    Общий ресурс Samba показывает каталог пользователя

    Как найти и заменить текст во всех открытых файлах с помощью gedit?

    Предотвращение постоянной зарядки аккумулятора в Ultrabook

    Как пакеты проходят через физические, VLAN и мостовые интерфейсы tc / netfilter?

    Использование пустой строки в качестве контекста «group-separator» для grep

    Почему sed меняет разрешения файла на cifs, установленном share?

    Запретить расширение переменных в контурах

    Восстановление опции в конце функции в zsh

    Как использовать sed для вставки строки вверху моего файла?

    Как защитить системы Linux от удаленной атаки BlueBorne?

    Как я могу запускать команду периодически и неограниченно, пока она не отключится?

    обновить почтовый клиент Evolution

    как дублировать значения каждой строки под каждым в течение n раз?

    Удаление OEM-версии Windows и повторная установка в VM

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