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

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

次のデータで最初のカンマの前の数字に基づいて重複行を見つける方法は?

入力する:

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

出力:

112112112 (2)
110110    (2)

答え1

修正できますが、スチールドライバーソリューション以前の同様の質問に対する迅速で汚れたパイプラインは次のとおりです。

cut -d, -f1 < input | sort | uniq -c | awk '$1 > 1 { print $2, "(" $1 ")" }'

答え2

シングルawk:

awk -F, '{ a[$1]++ }END{ for(i in a) if(a[i]>1) printf "%-12s(%d)\n",i,a[i] }' file

出力:

110110      (2)
112112112   (2)

答え3

入力ファイルを次にパイプすると、トリックが実行されます。

cut -f1 -d, | sort | uniq -cd

出力は公開したものとまったく一致しません。重複数は、括弧付きの最後の列ではなく、最初の列です。

  2 110110
  2 112112112

呼び出しを実行するには、cut最初のカンマで区切られたフィールドを分離して、sort同じフィールドが順番に並べられていることをuniq確認する必要があります。これを行うには、これらのフィールドを計算し、-c重複-d項目のみを表示する必要があります。入力全体をソートすることは、目的を達成する最も効率的な方法ではないかもしれませんが、入力が非常に大きい場合にのみ問題になります。

関連情報