具有重复行的文件示例:
# 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}