Tengo dos archivos de los cuales quiero crear un tercero que contenga toda la información.
archivo 1:
a 111
b 222
c 333
d 666
e 777
archivo 2:
111 x1
222 x2
333 x3
444 x4
555 x5
666 x6
777 x7
888 x8
Me gustaría combinarlos de la siguiente manera:
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
Nota:
La segunda columna del archivo 1 es un subconjunto de la primera columna del archivo 2
command-line
text-processing
gforce89
fuente
fuente
-e0
no necesita perl :)Usando join:
El comando de unión une las líneas de dos archivos que comparten un campo de datos común. En este caso: Únase al archivo2 y al archivo1 usando el campo 1 (
-1 1
) del archivo2 y el campo 2 (-2 2
) del archivo1.La salida será: "campo unido, campo 2 del archivo2, campo 1 del archivo1" (
-o'0,1.2,2.1'
), si falta un campo, coloque 0 (-e0
)Si uno de los dos archivos tiene más registros, agréguelos (en este caso, archivo2) (
-a1
)Consulte la página de manual del comando join
fuente
Un poco de
awk
magiao
Salida
Explicación
FNR==NR{a[$2]=$1;next}
Se ejecuta sobre
file1
(FNR==NR
) y crea una estructura clave-valor. La clave es la segunda columna ($2
) defile1
, el valor es la primera columna ($1
) defile1
{if(a[$1]==""){a[$1]=0};print $1,$2,a[$1]}
Atropella
file2
yif(a[$1]==""){a[$1]=0}
Si la clave en la primera columna (
$1
)file2
no existe enfile1
, necesitamos un0
print $1,$2,a[$1]
Imprima (usando
print
) la primera y la segunda columna defile2
y el valor de la estructura clave-valor con la clave de la primera columna ($1
) defile2
o
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'
Imprima (usando
printf
) la primera y la segunda columna defile2
y el valor de la estructura clave-valor con la clave de la primera columna ($1
) defile2
.FS
es el separador entre las columnas, tomado del archivo de entrada"%s%s%s%s%s\n"
es el formato para la salida
%s
- Cuerda\n
- Nueva líneafuente
Usando q :
Puede ser más legible de esta manera a veces.
fuente
q
está en el paquetepython3-q-text-as-data
(Python 3) y en el paquetepython-q-text-as-data
(Python 2).q
paquete? No parecen ser capaces de instalar, ya seapython-q-text-as-data
opython3-q-text-as-data
. "E: no se puede encontrar el paquete python3-q-text-as-data". Mi sistema ya ha instaladopython
,python2.7
,python3
, ypython3.4
.