我有一个需要一些操作的大型数据库文件。基本上我需要避免重复的字段由'|'分隔为:awk - 仅打印第一行重复项和它下面的行
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA1 | SAME | | blah | blah
ELIGIBLE | x2
DATA1 | SAME | | blah | blah blah
ELIGIBLE | x2
DATA2 | SAME | | | blah blah
ELIGIBLE | y1
DATA2 | SAME | | blah | blah
ELIGIBLE | y2
DATA2 | SAME | | blah | blah blah blah blah
ELIGIBLE | y2
DATA3 | SAME | | | blah blah
ELIGIBLE | z1
DATA3 | SAME | | blah | blah
ELIGIBLE | z2
DATA3 | SAME | | blah | blah blah blah blah
ELIGIBLE | z2
我使用的代码是
BEGIN{ FS = "|" }
{
count[$1]++;
if (count[$1] == 1)
first [$1] = $0;
if (count[$1] > 1)
print first[$1]
NR==1;
}
但它给我的输出:
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA2 | SAME | | | blah blah
DATA3 | SAME | | | blah blah
我宁愿像这样的输出:
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA2 | SAME | | | blah blah
ELIGIBLE | y1
DATA3 | SAME | | | blah blah
ELIGIBLE | z1
我并不关心标题栏,但n通过它来显示数据。对不起,业余解释,但任何解决方案的帮助,将不胜感激。我是新手,当涉及到Linux命令行脚本,所以如果任何人也可以解释为什么我的答案是错误的,我将不胜感激。我不局限于awk,并且可以使用任何命令解决方案。我只想用awk尝试解决方案。
所以,你需要保留的数据的第一行与给定TITLE1扔掉剩下的,即使他们有不同的TITLE5的等? – 2013-05-14 15:14:19
是正确的,并保留符合条件的行。 – 2013-05-14 15:40:03