最初のカンマの前の一致に基づいて重複行を削除する

最初のカンマの前の一致に基づいて重複行を削除する

Linux Centos 7サーバーに大きなテキストがあり、最初のカンマの前に一致する行を削除したいと思います。

入力する:

112112112,00,00,00
110110,01,01,02
112112112,11,11,888
110110,99,88,8
410410,22,22,22

出力:

410410,22,22,22

答え1

awk以下はいくつかのデュアルチャンネルソリューションです。最初のパスでは、フィールド1の頻度を配列に保存しますxxフィールド1の頻度が1として報告されると、2番目のパスは1行を印刷します。

awk -F, 'first_pass{x[$1]++; next}; x[$1] == 1' first_pass=1 file first_pass=0 file

awk -F, 'BEGIN{while ((getline<ARGV[1]) > 0)x[$1]++}; x[$1] == 1' file

答え2

短いGNUdatamash+sedコンビネーション:

datamash -sft',' -g1 count 1 <file | sed -n 's/,1$//p'

上記のパイプラインの最初のプロセスは、最初のフィールド値に対して各グループの項目数をグループ化して計算し、-g1結果の数を最後のフィールドに追加します。

関連情報