列の重複値のマージ[閉じる]

列の重複値のマージ[閉じる]

このようなファイルが与えられると

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

関連情報