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

答え2

cut最初の2つのフィールドはuniq提案どおりに実行され、grep元のファイルの行の結果を使用します。

cut -d, -f1,2 file.cvs |uniq -d|grep -Ff - file.cvs

ファイルがまだソートされていない場合は、次の前にソートする必要がありますuniq

cut -d, -f1,2 file.cvs |sort|uniq -d|grep -Ff - file.cvs

2番目の質問(反対結果)の場合は、代わりに-uoptionを使用してください-d

cut -d, -f1,2 file.cvs |sort|uniq -u|grep -Ff - file.cvs

答え3

アッ解決策:

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

awk -F, '$1==f1 && $2==f2{ printf "%s,%s,%s\n%s\n", f1,f2,f3,$0 }
        { f1=$1; f2=$2; f3=$3 }' <(sort -t, -k1,1 -k2,2 file.txt)

出力:

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

-csvファイルから重複行を除外する(フィールド1,2)

awk -F, 'f1 && f2{ if($1!=f1 || $2!=f2) { printf "%s,%s,%s\n", f1,f2,f3 } else next }
        { f1=$1; f2=$2; f3=$3 }' <(sort -t, -k1,1 -k2,2 file.txt)

出力:

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

関連情報