![合并列中的重复值](https://linux22.com/image/215881/%E5%90%88%E5%B9%B6%E5%88%97%E4%B8%AD%E7%9A%84%E9%87%8D%E5%A4%8D%E5%80%BC.png)
给定一个这样的文件
value,value,value,value
value1,value1,value,value1
value2,value2,value,value2
我怎样才能把它变成这样:
value,value,value,value
value1,value1, ,value1
value2,value2, ,value2
基本上,要合并第 3 列中的重复值并将其显示在第一行中并保留其他数据,还要将其作为 csv 中的一条记录。
我已经尝试过cat file | sort -u -t, -k3
,但它不起作用。
答案1
不仅仅适用于第 3 列
$ cat file.csv
aaa,bbb,ccc,ddd
aat,bbk,ccc,ddd
aaa,bbk,cc3,dd4
aaa,bbb,ccc,ddd
$ awk '
BEGIN {FS = OFS = ","}
NR == 1 {for (i=1; i<=NF; i++) prev[i] = $i}
NR > 1 {
for (i=1; i<=NF; i++)
if ($i == prev[i])
gsub(/./, " ", $i)
else
prev[i] = $i
}
1
' file.csv
aaa,bbb,ccc,ddd
aat,bbk, ,
aaa, ,cc3,dd4
,bbb,ccc,ddd