我正在尝试将多个文件组合成一个最终文件。每个文件中都有许多条目,其中大多数具有重叠的标题。我想在标题标题下合并两者之间的内容。考虑结合两个字典,它更有意义。可以在两者中找到单个单词的条目,但每个单词的定义略有不同。一些条目存在于一个中,而不存在于另一个中,等等。
例如,我想合并这两个文件以生成一个输出文件:
文件 1
Entry 1
Green Trees
Entry 3
Orange Fibers
文件 2
Entry 1
Red Trees
Entry 2
Spotted Zebras
Entry 3
Blue Fibers
输出文件
Entry 1
Green Trees
Red Trees
Entry 2
Spotted Zebras
Entry 3
Orange Fibers
Blue Fibers
请注意,文件 1 中不存在条目 2,但它已成为最终产品。同样,每个条目的内容都在条目 ID 匹配的任何地方合并。
我怎样才能做到这一点?
编辑:以上是提出问题的简化版本。以下是文件中实际条目的示例。
$$$00001是条目标题。
从文件 1
$$$00001
<b><br>- Original: Α<b><br></b></b>- Transliteration: A<b><br></b></b>- Phonetic: al'-fah<b><br></b></b>-...
$$$00002
<b><br>- Original: script<b><br></b></b>- Translitera...
来自文件 2
$$$00001
<b><br>α<b><br></b></b>a; indeclinable...
$$$00002
<b><br>texts<b><br></b></b>A...
一个简单
awk
的单线解决了您的示例:我想你知道基本上
awk
是按照程序一个接一个地处理输入行。这个特定awk
的程序被指定为第一个参数,由三个语句组成。让我们一一分析:/^Entry/{k=$0;next}
意思是:如果处理的行匹配/^Entry/
,则将其存储在变量中k
并忽略以下语句进入下一个循环。{g[k]=g[k]"\n"$0}
没有前置条件,所以它总是被执行,并且意味着:用键更新存储在字典中的值:新值必须是(可能为空的)先前值、回车符和当前行的串联.g
k
g[k]
"\n"
END{for(k in g)print k g[k]}
有一个END
条件,因此在处理完所有输入行后执行。它说:对于 中的每个键g
,即对于出现在输入文件中的每个标题,打印相关值,这是在该标题下的输入文件中找到的所有行的串联。要使用它 IRL,您必须
/^Entry/
用正确的模式替换(可能/^\$\$\$/
)。