仅打印 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

使用同一输入文件两次处理两个文件

  • NR==FNR{a[$1,$2]++; next}使用前两个字段作为键,保存出现次数
  • a[$1,$2]>1仅当第二遍期间 count 大于 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前两个字段,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

对于第二个问题(结果相反),使用 option-u而不是-d

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

答案3

awk解决方案:

--仅打印 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}}

相关内容