csvファイルのフィールド1、2から重複行のみを印刷する

csvファイルのフィールド1、2から重複行のみを印刷する

次のコマンドに従って、ファイルの重複行を印刷できます。

uniq -d string file.txt

しかし、csvファイルでこれをどのように実行しますか?

csvファイルのフィールド1、2から重複行のみを印刷する必要があります。 - フィールド3は除外されます。

FS-","

たとえば、

 spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
 spark2-thrift-sparkconf,spark.history.fs.logDirectory,true
 spark2-thrift-sparkconf,spark.history.Log.logDirectory,true
 spark2-thrift-sparkconf,spark.history.DF.logDirectory,true

予想される結果:

 spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
 spark2-thrift-sparkconf,spark.history.fs.logDirectory,true

第二:

csvファイルから重複行を除外する方法(フィールド1、2からのみ重複行を削除することを意味)

予想出力:

 spark2-thrift-sparkconf,spark.history.Log.logDirectory,true
 spark2-thrift-sparkconf,spark.history.DF.logDirectory,true

ベストアンサー1

$ awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]>1' file.txt file.txt 
spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
spark2-thrift-sparkconf,spark.history.fs.logDirectory,true

同じ入力ファイルを2回使用して両方のファイルを処理します。

  • NR==FNR{a[$1,$2]++; next}最初の 2 つのフィールドをキーとして使用して、発生回数を保存します。
  • a[$1,$2]>12回目のパスでカウントが1より大きい場合にのみ印刷


逆の場合は、条件確認を変更してください。

$ awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]==1' file.txt file.txt 
spark2-thrift-sparkconf,spark.history.Log.logDirectory,true
spark2-thrift-sparkconf,spark.history.DF.logDirectory,true

おすすめ記事