如何在给定单词前后查找文本并将其输出到不同的文本文件中?

时间:2019-04-01 16:47:12

标签: python awk sed grep

我有一个像这样的文本文件:

  

...
  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的基本知识。

3 个答案:

答案 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