Comment créer un nouveau fichier fusionnant des colonnes sélectives à partir de deux fichiers distincts en utilisant awk? Sans gâcher l'ordre des éléments des deux fichiers.
Exemple: le fichier 3 peut contenir la colonne 1,2,3 du fichier 1 et la colonne 4 du fichier 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
la source
la source
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
paste file1 file2
puis imprimer les champs sélectionnés dansawk
.file2
en mémoire, ce qui peut être prohibitif si les fichiers sont volumineux. Il existe un moyen plus simple de le faire sans surcharge de mémoire (voir ma réponse).Il y a un outil dédié pour cela:
paste
. Il concatène chaque ligne complète du premier fichier avec la ligne correspondante du deuxième fichier; vous pouvez supprimer les colonnes indésirables avant ou après. Par exemple, en supposant que vos colonnes sont délimitées par des tabulations:Voici un moyen de pré-filtrer les deux fichiers qui repose sur la substitution de processus ksh / bash / zsh.
Awk est principalement conçu pour traiter un fichier à la fois, mais vous pouvez appeler
getline
pour lire un autre fichier en parallèle.Jusqu'à présent, je suppose que vous voulez faire correspondre la ligne 1 du fichier 1 avec la ligne 1 du fichier 2, la ligne 2 du fichier 1 avec la ligne 2 du fichier 2, etc. Si vous voulez faire correspondre le contenu d'une colonne, c'est un matière complètement différente.
join
fera le travail à condition que la colonne que vous souhaitez faire correspondre soit triée.la source