Truncamiento de cadenas después de ejecutar el script awk
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
¿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=""
}'