【问题标题】:how to find text before and after given words and output into different text files?如何在给定单词之前和之后查找文本并输出到不同的文本文件中?
【发布时间】:2019-08-22 21:44:30
【问题描述】:

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

...
姓名:name-1
...
名称:name-2
...
...
...
姓名:姓名-n
...

我想要这样的输出文本文件:

name_1.txt : 名称 : name-1 ...
name_2.txt : 名称 : name-2 ...
...
name_n.txt : 名称 : name-n ...

我有grep、sed、awk、shell脚本、python的基本知识。

【问题讨论】:

  • 酷。到目前为止,您尝试过什么?

标签: python awk sed grep


【解决方案1】:

使用 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 让 shell 运行在模式缓冲区中构造的命令。

这会将空行输出到标准输出,但会为每个匹配的行创建一个文件。

这取决于文件只有与此格式匹配的行...但您可以在此处扩展要点以使用 n 跳过其他行。

【讨论】:

    【解决方案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】:

      解决方案:

      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

      【讨论】:

      • 你应该提到 gensub() 需要 GNU awk。
      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多