AWK不在记录上重复相同的字段

时间:2016-12-06 13:52:03

标签: awk

我想提供一些数据:

A;01;data_1;CP
A;01;data_15;aP
A;01;data_23;Com
A;01;data_106;id

这样

A;01;data_1;CP
;;data_15;aP
;;data_23;Com
;;data_106;id

使用awk有一种简单的方法吗?

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

是的,不知道这是不是很简单......

awk  'BEGIN{FS=OFS=";"}{for(i=1;i<=NF;i++) if($i==a[i]) $i="";else a[i]=$i }1' file

该脚本将输入和输出分隔符设置为;

循环遍历每一行的所有参数,如果此参数内容与最后一行相同,则清空参数内容。

答案 1 :(得分:1)

您可以使用以下awk脚本:

# dedup.awk

BEGIN {
    # Setting input and output delimiter to ';'
    FS=OFS=";"
}

{
    # Iterate trough all fields
    for(i=1;i<NF+1;i++) {
        # If the previous record's field at this index has
        # the same value as this field then set this field
        # to an empty string
        if(p[i]==$i) {
            $i=""
        } else {
           # Otherwise update the array that keeps
           # information about the previous record(s)
           p[i] = $i
        }
    }
    # Print the record
    print
}

你这样执行:

awk -f dedup.awk input.file