¿Cómo crear un nuevo archivo fusionando columnas selectivas de dos archivos separados usando awk? Sin estropear el orden de los elementos de AMBOS archivos.
Ejemplo: el archivo 3 puede contener la columna 1,2,3 del archivo 1 y la columna 4 del archivo 2.
File 1
A 23 8 T
A 63 9 9
B 45 3 J
File 2
A 0
A 6
B 5
File 3
A 23 8 0
A 63 9 6
B 45 3 5
text-processing
awk
columns
dovah
fuente
fuente
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
paste file1 file2
y luego imprimir los campos seleccionados enawk
.file2
en la memoria, lo que puede ser prohibitivo si los archivos son grandes. Hay una manera más simple de hacer esto sin la sobrecarga de memoria (vea mi respuesta).Hay una herramienta dedicada para que:
paste
. Concatena cada línea completa del primer archivo con la línea correspondiente del segundo archivo; Puede eliminar columnas no deseadas antes o después. Por ejemplo, suponiendo que sus columnas están delimitadas por tabuladores:Aquí hay una manera de prefiltrar ambos archivos que se basan en la sustitución del proceso ksh / bash / zsh.
Awk está orientado principalmente a procesar un archivo a la vez, pero puede llamar
getline
para leer de otro archivo en paralelo.Hasta ahora, he asumido que desea hacer coincidir la línea 1 del archivo 1 con la línea 1 del archivo 2, la línea 2 del archivo 1 con la línea 2 del archivo 2, etc. Si desea hacer coincidir el contenido de una columna, eso es un materia completamente diferente.
join
hará el trabajo siempre que la columna que desee hacer coincidir esté ordenada.fuente