使用shell脚本在文件中查找重复的文本块

时间:2017-06-28 15:52:01

标签: shell

假设我有一个包含以下行的文本文件: -

abcd/efgh/a.jar
{
abcd/efgh/a.class
cdef/ghij/b.class
klmn/opqr/c.class
}
lkmn/opqr/b.zip
{
abcd/efgh/a.class
cdef/ghij/b.class
}
abcd/efgh/a.jar
{
cdef/ghij/b.class
}

现在abcd/efgh/a.jar在第一种情况下在花括号中有abcd/efgh/a.classcdef/ghij/b.classklmn/opqr/c.class。将其视为1块文本。现在abcd/efgh/a.jar下面的花括号中再次cdef/ghij/b.class。我想删除此部分/文本块。所以最终的输出必须是: -

abcd/efgh/a.jar
{
abcd/efgh/a.class
cdef/ghij/b.class
klmn/opqr/c.class
}
lkmn/opqr/b.zip
{
abcd/efgh/a.class
cdef/ghij/b.class
}

任何帮助都将受到高度赞赏:)

1 个答案:

答案 0 :(得分:0)

awk中构建这样的状态机可能不是一个好主意,但这看起来像你想要的那样:

 awk '/^{$/{s=1} /^}$/ {s=0} !p; !s{p=k[$0]++}'  input

(也就是说,它产生了示例输入的演示输出,但我对一般情况下你想要的东西做了很多假设。)