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

우리는 필드 1과 2에서 중복 문자열이 있는 행만 삭제하기 위해 다음 awk를 생성했지만, 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(첫 번째 필드와 두 번째 필드의 연결)는 배열에서 한 번만 나타나므로 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}

관련 정보