我有一个像这样的文本文件:
...
NAME: name-1
...
NAME: name-2
...
...
...
名称: name-n
...
我想要这样输出文本文件:
name_1.txt:名称: name-1 ...
name_2.txt:NAME: name-2 ...
...
name_n.txt:名称:名称-n ...
我具有grep,sed,awk,shell脚本,python的基本知识。
答案 0 :(得分: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**
将在此处完成操作。
请阅读以下链接中的字符串函数,它确实可以为您提供帮助。 string functions in awk
答案 1 :(得分:0)
使用GNU sed:
sed "s/\(.*\)\(name-.*\)/echo '\1 \2' > \2.txt/;s/-/_/2e" input-file
NAME : name-2
转换为echo "NAME : name-2" > name-2.txt
-
替换为_
,得到echo "NAME : name-2" > name_2.txt
e
使外壳程序运行在模式缓冲区中构造的命令。这会将空白行输出到stdout,但为每个匹配的行创建一个文件。
这取决于文件是否只有匹配此格式的行...但是您可以在此处展开要点,以使用n
跳过其他行。
答案 2 :(得分:0)
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