2015-11-19 98 views
1

我有一个数据集看起来像这样排:awk中删除基于重复字段

Input 

Cat 2 1 aa 
Dog 1 0 aa 
Dog 1 2 aa 
Cat 2 7 aa 
Mouse 0 0 aa 
Cat 1 5 
Dog 4 3 
.  . . 
.  . . 
.  . . 
Cat 1 5 
Dog 4 3 
Cat 6 9 bb 
Dog 3 1 bb 
Dog 3 6 bb 
Cat 6 4 bb 
Mouse 0 0 bb 

有了这个数据集我要做到以下几点:

  • 如果第4栏是空白的,打印行。
  • 如果第4列不为空,仅打印与第1列和列的每个组合4.

    输出
    猫2 1 AA
    犬1节0 AA
    鼠标0的记录的第一次出现0 aa
    Cat 1 5
    狗4 3
    。 。 。
    。 。 。
    。 。 。
    猫1 5
    犬4 3
    第6类4 BB
    狗3 1的bb
    鼠标0 0 BB

注意,这里: “猫2 1 AA” 是与第一记录栏1 =猫和栏4 = aa,因此它被打印。 “cat 1 5 aa”没有打印,因为我们已经有了第1栏= cat和第4栏= aa的记录。

+0

尝试排序+ uniq的+ AWK的组合..... –

回答

1

使用

awk '$4 == "" || !a[$1,$4]++' input 

结果:

Cat 2 1 aa 
Dog 1 0 aa 
Mouse 0 0 aa 
Cat 1 5 
Dog 4 3 
.  . . 
.  . . 
.  . . 
Cat 1 5 
Dog 4 3 
Cat 6 9 bb 
Dog 3 1 bb 
Mouse 0 0 bb 
+0

你做出一件很容易的!好一个! :) – AnPocArBuile