合并列中的重复值

合并列中的重复值

给定一个这样的文件

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

答案2

:

perl -F, -e '
    do{ $col = $F[2]; print; next } if $.==1;
    $F[2] = " "x4 if $F[2] eq $col;
    print join ",", @F
' file

:

awk '
    BEGIN{FS=OFS=","}
    {if (NR==1) col=$1;
    else if($3 == col) $3="    "}
    1
' file

输出

value,value,value,value
value1,value1,    ,value1
value2,value2,    ,value2

相关内容