我想提供一些数据:
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有一种简单的方法吗?
感谢任何帮助!
答案 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