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

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

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

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

おすすめ記事