Tengo dos archivos con varias filas. El primer archivo tiene 2 columnas y el segundo archivo tiene más de 2000 columnas. Los conjuntos de datos de ejemplo son:
Archivo de ejemplo_1
car Maruti
car TATA
car Hyundai
car Jaguar
Jeep Mahindra
Archivo de ejemplo_2
car A B C D E F G
Jeep X Y Z W Q W K
He probado esto
awk '{a[$1]=a[$1]" "$0} ++n[$1]==2{print a[$1]}' File_2 File_1
La salida de este comando imprime los datos solo una vez y no en perfecto orden. Obtuve el siguiente resultado:
car A B C D E F G car Maruti
Jeep X Y Z W Q W K Jeep Mahindra
La salida esperada sobre la base del primer archivo es:
car Maruti car A B C D E F G
car TATA car A B C D E F G
car Hyundai car A B C D E F G
car Jauar car A B C D E F G
Jeep Mahindra Jeep X Y Z W Q W K
2 respuestas
Por favor, intente seguir.
awk 'FNR==NR{a[$1]=$0;next} ($1 in a){print $0,a[$1]}' file2 file1 | column -t
La salida será la siguiente.
car Maruti car A B C D E F G
car TATA car A B C D E F G
car Hyundai car A B C D E F G
car Jaguar car A B C D E F G
Jeep Mahindra Jeep X Y Z W Q W K
Sería más fácil usar el comando join
aquí, que está hecho específicamente para tareas como la suya. Sin embargo, join
requiere archivos ordenados, así que primero los ordenamos.
Con bash
la clasificación se puede hacer en el lugar
join <(sort 1stFile) <(sort 2ndFile)
Con un shell posix simple (sh
) debe usar archivos temporales
sort 1stFile > 1stFileSorted
sort 2ndFile > 2ndFileSorted
join 1stFileSorted 2ndFileSorted
rm 1stFileSorted 2ndFileSorted
Para alinear las columnas en la salida, puede usar join … | column -t
.
Preguntas relacionadas
Nuevas preguntas
awk
AWK es un lenguaje de programación interpretado diseñado para el procesamiento de texto y generalmente se utiliza como una herramienta de extracción de datos e informes. AWK se usa en gran medida con sistemas Unix.