#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
- Затем замените второй
-
на_
yieldingecho "NAME : name-2" > name_2.txt
e
пусть оболочка запустит команду, созданную в буфере шаблонов.
Это выводит пустые строки в стандартный вывод, но создает файл для каждой соответствующей строки.
Это зависит от того, что в файле нет ничего, кроме строк, соответствующих этому формату … но вы можете расширить суть здесь, чтобы пропустить другие строки с n
.