【发布时间】:2012-08-13 12:26:55
【问题描述】:
我正在尝试为一个应用程序制作一个日志文件摘要工具,该工具会创建许多重复的条目,只有一个不同的后缀来指示执行点。
这是一个通用版本:
包含这些内容的 text_file (infile_grocery.txt)。
milk skim fruit apple banana
milk skim fruit orange
milk skim fruit mango
milk skim fruit pomegranate
milk 2 percent fruit cherry tomato
milk 2 percent fruit peach
milk whole fruit pineapple
milk skim fruit strawberry raspberry
milk skim fruit strawberry rhubarb
milk whole fruit pineapple
我希望得到的是:
milk skim fruit apple banana, orange, mango, pomegranate
milk 2 percent fruit cherry tomato, peach
milk whole fruit pineapple
milk skim fruit strawberry raspberry, strawberry rhubarb
milk whole fruit pineapple
我目前编写的命令行是:
sed -rn "{H;x;s|^(.+) fruit ([^\n]+)\n(.*)\1 fruit (.+)$|\1 fruit \2, \4|;x}; ${x;s/^\n//;p}" infile_grocery.txt
但我得到的结果是:
milk skim fruit apple banana, mango, strawberry raspberry
milk skim fruit strawberry rhubarb
milk whole fruit pineapple
我以某种方式丢弃了输入。任何大师对如何构建这个有更好的想法?
【问题讨论】:
-
如何识别重复行?
-
后缀是前三个之后的单词。只有当具有相似前缀的行是连续的时,才应该进行连接。后缀也应使用逗号连接。对吗?
-
不一定是前三个之后的词。分隔符是“水果”这个词。之前的任何内容都需要在连续的行中匹配才能使它们有资格进行修改。后面的任何内容都应该使用逗号连接到上一行的末尾。
标签: sed gnu inline-editing