как найти текст до и после заданных слов и вывести в разные текстовые файлы? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть такой текстовый файл:

...
ИМЯ: имя-1
...
ИМЯ: name-2
...
...
...
NAME: name-n
...

Мне нужны выходные текстовые файлы, такие как:

name_1.txt: NAME: name-1 ...
name_2.txt: NAME: name-2 ...
...
name_n.txt: NAME: name-n ...

У меня есть основныезнание grep, sed, awk, сценариев оболочки, python.

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Решение:

awk '{x=gensub("-","_","g",$3)".txt"; print x" : " $0}' names.csv
name_1.txt : NAME : name-1
name_2.txt : NAME : name-2

**gensub** добьется цели здесь. Пожалуйста, прочитайте строковые функции по следующей ссылке, это должно действительно помочь вам. строковые функции в awk

0 голосов
/ 01 апреля 2019

awk на помощь!

$ awk '$1=="NAME"{f=$NF".txt"; print > f; close(f)}' file

, что дает

$ head nam*
==> name-1.txt <==
NAME : name-1

==> name-2.txt <==
NAME : name-2

==> name-n.txt <==
NAME : name-n
0 голосов
/ 01 апреля 2019

С GNU sed:

sed "s/\(.*\)\(name-.*\)/echo '\1 \2' > \2.txt/;s/-/_/2e" input-file

  • Превратить линию NAME : name-2 в echo "NAME : name-2" > name-2.txt
  • Затем заменить второй - на _ yielding echo "NAME : name-2" > name_2.txt
  • e имеет оболочку для запуска команды, созданной в буфере шаблонов.

Это выводит пустые строки в стандартный вывод, но создает файл для каждой совпадающей строки.

Это зависит от того, что в файле нет ничего, кроме строк, соответствующих этому формату ... но вы можете расширить суть здесь, чтобы пропустить другие строки с помощью n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...