awk:删除字段 1 和 2 重复的行

awk:删除字段 1 和 2 重复的行

具有重复行的文件示例:

 # more  file.csv

 spark2-env,spark_thrift_cmd_opts,--driver-memory 15g --executor-cores 7
 spark2-thrift-sparkconf,spark.memory.offHeap.enabled,true
 mapred-site,yarn.app.mapreduce.am.command-opts,-Xmx5324m -Dhdp.version=${hdp.version}
 spark2-env,spark_thrift_cmd_opts,--driver-memory 15g --executor-cores 7

我们创建了以下 awk,以便仅删除字段 1 和 2 中具有重复字符串的行,但 awk 由于某些不清楚的原因也删除了字段 3 重复的行。

我的 awk 语法有什么问题?

 # awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]==1'  blueprint_param_file.csv  blueprint_param_file.csv

 spark2-thrift-sparkconf,spark.memory.offHeap.enabled,true
 mapred-site,yarn.app.mapreduce.am.command-opts,-Xmx5324m -Dhdp.version=\${hdp.version}

预期输出:

spark2-env,spark_thrift_cmd_opts,--driver-memory 15g --executor-cores 7
spark2-thrift-sparkconf,spark.memory.offHeap.enabled,true
mapred-site,yarn.app.mapreduce.am.command-opts,-Xmx5324m -    

答案1

不需要两次处理同一个文件,应用以下逻辑就足够了:

awk -F, '!a[$1,$2]++' blueprint_param_file.csv
  • !a[$1,$2]++- 确保至关重要的key(第一个和第二个字段的串联)在 array 中仅出现一次a,从而排除重复项

输出:

spark2-env,spark_thrift_cmd_opts,--driver-memory 15g --executor-cores 7
spark2-thrift-sparkconf,spark.memory.offHeap.enabled,true
mapred-site,yarn.app.mapreduce.am.command-opts,-Xmx5324m -Dhdp.version=${hdp.version}

相关内容