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

-e0no 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
awkmagiao
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
file2yif(a[$1]==""){a[$1]=0}Si la clave en la primera columna (
$1)file2no existe enfile1, necesitamos un0print $1,$2,a[$1]Imprima (usando
print) la primera y la segunda columna defile2y el valor de la estructura clave-valor con la clave de la primera columna ($1) defile2o
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'Imprima (usando
printf) la primera y la segunda columna defile2y el valor de la estructura clave-valor con la clave de la primera columna ($1) defile2.FSes 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
qestá en el paquetepython3-q-text-as-data(Python 3) y en el paquetepython-q-text-as-data(Python 2).qpaquete? No parecen ser capaces de instalar, ya seapython-q-text-as-dataopython3-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.