AWK, reemplaza el valor del campo haciendo coincidir campos en dos archivos

AWK, reemplaza el valor del campo haciendo coincidir campos en dos archivos

Tengo 2 archivos Address.csv y ZipCode.txt, quiero generar un archivo similar a Address.csv y actualizar el campo de ciudad de "ciudad" a "encontrado" cuando el código postal coincida con los primeros 5 caracteres del código postal. en el archivo Address.csv.

Lo que tengo:

  Address.csv
  Zip,Address1,Address2,conty,city,state
  65432-3421,115 main st,atlantic,city,new jersey
  45678-4098,654 2nd st n.,bergin,city,new jersey
  23456-3425,4215 1st st. s.,suite a2,camden,city,new jersey
  12345-6278,3587 main st,apt j1,essex,city,new jersey

  ZipCode.txt
  23456
  12345
  34567
  45678

Lo que quiero:

  NewAddress.csv
  Zip,Address1,Address2,conty,city,state
  65432-3421,115 main st,atlantic,city,new jersey
  45678-4098,654 2nd st n.,bergin,found,new jersey
  23456-3425,4215 1st st. s.,suite a2,camden,found,new jersey
  12345-6278,3587 main st,apt j1,essex,found,new jersey

Lo que he probado con la ayuda de Simlevawk reemplaza el valor del campo según el valor coincidente en otro archivo:

  awk -F, -v OFS="," 'NR==FNR {a[$1]++;next} $1 in a {$4="found"} 1' ZipCode.txt Address.csv     

Respuesta1

Lo principal que debe cambiarse en su secuencia de comandos es obtener los primeros 5 caracteres del primer campo usando la función substr.

Los datos Address.csvson inconsistentes. Las dos primeras líneas de datos tienen 5 campos, las otras tienen 6 campos. Por eso uso $(NF-1)(penúltimo campo) en lugar de $4(cuarto campo). De lo contrario, se cambiarán los campos incorrectos con los datos de ejemplo.

awk -F, -v OFS="," 'NR==FNR {a[$1]++;next} substr($1,1,5) in a {$(NF-1)="found"} 1' ZipCode.txt Address.csv

Esto imprime

Zip,Address1,Address2,conty,city,state
65432-3421,115 main st,atlantic,city,new jersey
45678-4098,654 2nd st n.,bergin,found,new jersey
23456-3425,4215 1st st. s.,suite a2,camden,found,new jersey
12345-6278,3587 main st,apt j1,essex,found,new jersey

información relacionada