Como comparar e substituir o valor em um determinado local pelo awk

1

Eu quero comparar dois arquivos csv com uma coluna comum e, em seguida, substituir os dados do primeiro arquivo para o segundo arquivo em um determinado local.

arquivo1.csv:

"id","name","marks","subject","result"
"1","a","","art",""
"4","c","","math",""
"3","b","","history",""
"5","d","","comerce",""

arquivo2.csv:

"id","marks","result"
"4","40","pass"
"3","30","fail"
"1","20","fail"
"6","10",""
"5","10",""

a saída deve ser:

"id","name","marks","subject","result"
"1","a","20","art","fail"
"4","c","40","math","pass"
"3","b","30","history","fail"
"5","d","10","comerce",""

Estou usando a instrução awk como abaixo, mas ela mescla o valor que não foi adicionado em determinado local:

awk 'NR==FNR{a[$1]=$2; b[$1]=$3; next}  {print $0, a[$2], b[$2] } file1.csv file2.csv 
    
por user828007 09.05.2018 / 22:59

1 resposta

1

awk '
  BEGIN{OFS=FS=","} 
  NR==FNR {
    marks[$1]=$2; status[$1]=$3; next
  } 
  $1 in marks {$3 = marks[$1]} 
  $1 in status {$5 = status[$1]}
  1' file2.csv file1.csv
"id","name","marks","subject","result"
"1","a","20","art","fail"
"4","c","40","math","pass"
"3","b","30","history","fail"
"5","d","10","comerce",""
    
por steeldriver 10.05.2018 / 00:31