Truncamiento de cadenas después de ejecutar el script awk

Nov 23 2020

Tengo este codigo

BEGIN { FS=OFS=";" }
{ key = $(NF-1) } NR == FNR { for (i=1; i<(NF-1); i++) { if ( !seen[key,$i]++ ) {
            map[key] = (key in map ? map[key] OFS : "") $i } } next } { print $0 map[key] }

Uso el código de esta manera

awk -f tst.awk 2.txt 1.txt

Tengo dos archivos de texto

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

Intento generar esta salida 3 .txt

AA;BB;CC;DD;

pero con este script no es posible porque este script solo devuelve AA;BB;

lógica: lo anterior solo usa cadenas literales en una búsqueda hash de índices de matriz, por lo que no le importa qué caracteres tiene en su entrada. Sin embargo, sobre la salida de muestra:
si en 2 .txt hay campos comunes también en 1 .txt., Por ejemplo, BB;AA;entonces necesita concatenarlos en una sola fila, es decir, AA;BB;CC;DD;no se requiere ordenar, por ejemplo, no es relevante si la salida es BB;AA;DD;CC;
Solo condición que es requerido es evitar duplicados pero mi script ya hace esto

Respuestas

1 RavinderSingh13 Nov 23 2020 at 08:33

¿Podría intentar seguir, según el comentario de OP, ambos archivos tienen solo 1 línea? Entonces, use el pastecomando para combinar ambos archivos y luego procese su salida por awkcomando.

paste -d';' 1.txt 2.txt | 
awk '
BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}'