我看过几篇关于删除重复行的文章,但我需要一些更具体的东西。以下是一些原始数据的示例:
11111 AA 1 date1
11111 BB 64 date1
11111 BB 64 date2
...
11111 BB 64 date64
11111 BB 64 date1
11111 BB 64 date2
...
11111 BB 64 date64
11111 BB ## date1
11111 BB ## date2
...
11111 BB ## date##
22222 AA 1 date1
22222 BB 64 date1
22222 BB 64 date2
...
22222 BB 64 date64
22222 BB 64 date1
22222 BB 64 date2
...
22222 BB 64 date64
22222 BB ## date1
22222 BB ## date2
...
22222 BB ## date##
注意:其中 ## 是一些 < 64 的数字。
我需要编辑该文件,使其看起来像这样:
11111 AA 1 date1
11111 BB 64 date1
11111 BB 64 date1
11111 BB ## date1
22222 AA 1 date1
22222 BB 64 date1
22222 BB 64 date1
22222 BB ## date1
我已经看到了几个使用 awk、sed 或 ed 以及正则表达式来匹配行的第一部分的示例。我的困惑在于“BB 64”和“BB ##”的出现,而不仅仅是删除所有 BB 行,而是删除第一行。
重要信息:在 Solaris v5.8 上运行此 csh 脚本
AA 线在这个问题中并不重要,除了知道它们在那里(我们没有对它们做任何事情)。
到目前为止,这基本上是我所得到的(在查看使用其他语言的示例时仍然存在语法问题,所以如果你能纠正,请做):
sed 'N;(\d{1,8}\sBB\s\d{1,2}.+\n);P;D' filename
如果我没有因为语法而出错,我相信这会删除所有 BB 行,但第一个“BB 64 date1”除外。我认为我上面的 sed 正则表达式基于 uniq 但只匹配行的第一个部分而不是整行,因为我需要每个 BB 的第一个日期(如果每个 11111、22222 有超过 1 个系列的 BB 64等,每个系列的输出应包含相同的 BB 64 行 [只是 date1])。有任何想法吗?