как найти текст до и после заданных слов и вывести в разные текстовые файлы?

#python #awk #sed #grep

#python #awk #sed #grep

Вопрос:

У меня есть текстовый файл, подобный этому:


NAME : name-1

ИМЯ: name-2



NAME : name-n

Я хочу выводить текстовые файлы, подобные этому:

name_1.txt : ИМЯ : name-1
name_2.txt : ИМЯ : name-2

name_n.txt : ИМЯ : name-n

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

Комментарии:

1. Прохладный. Что вы уже пробовали?

Ответ №1:

Решение:

 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

Комментарии:

1. Вы должны упомянуть, что для gensub() требуется GNU awk.

Ответ №2:

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
  

Ответ №3:

С 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 .