
次のコマンドに従って、ファイルの重複行を印刷できます。
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]>1
2回目のパスでカウントが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番目の質問(反対結果)の場合は、代わりに-u
optionを使用してください-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}}