Je vais poser ma question avec un exemple. J'ai 2 fichiers:
Fichier # 1:
118D FC300_R5_TP FX.B 32775 2112 6 2038 6 2112 0
118E FC300_R5_TP FX.B 32775 2136 7 2065 6 2136 0
118F FC300_R5_TP FX.B 32775 2124 6 2064 6 2124 0
1190 FC300_R5_TP FX.B 819210 814632 99 814609 99 814632 0
1191 FC300_R5_TP FX.B 819210 104100 13 103714 13 104100 0
1192 FC300_R5_TP FX.B 1638420 1609476 98 1609402 98 1609476 0
1196 FC300_R5_TP FX.B 1638420 1638432 100 1638379 100 1638432 0
119A FC300_R5_TP FX.B 3276840 3271776 100 3271698 100 3271776 0
119E FC300_R5_TP FX.B 3276840 3264120 100 3264034 100 3264120 0
11A2 FC300_R5_TP FX.B 3276840 2328648 71 2328546 71 2328648 0
11A6 FC300_R5_TP FX.B 3276840 2328444 71 2328355 71 2328444 0
11AA FC300_R5_TP FX.B 3276840 2328528 71 2328403 71 2328528 0
11AE FC300_R5_TP FX.B 3276840 2328648 71 2328468 71 2328648 0
11B2 FC300_R5_TP FX.B 3276840 2130000 65 2129766 65 2130000 0
173A FC300_R5_TP FX.B 6553680 6478572 99 6477747 99 6478572 0
Fichier # 2:
11AA FC300_R5_TP FX.B 3276840 2328528 71 2328403 71 2328528 0
11AE FC300_R5_TP FX.B 3276840 2328648 71 2328468 71 2328648 0
11B2 FC300_R5_TP FX.B 3276840 2130000 65 2129766 65 2130000 0
173A FC300_R5_TP FX.B 6553680 6478572 99 6477747 99 6478572 0
0BDB FC600_R5_TP FX.B 33554640 6044364 18 6033105 18 6044364 0
0BDC FC600_R5_TP FX.B 33554640 6613536 20 6481974 19 6613536 0
0BDD FC600_R5_TP FX.B 33554640 4435848 13 4057170 12 4435848 0
0BDE FC600_R5_TP FX.B 33554640 6620868 20 6249518 19 6620868 0
Sortie désirée
Fichier # 3:
0BDB FC600_R5_TP FX.B 33554640 6044364 18 6033105 18 6044364 0
0BDC FC600_R5_TP FX.B 33554640 6613536 20 6481974 19 6613536 0
0BDD FC600_R5_TP FX.B 33554640 4435848 13 4057170 12 4435848 0
0BDE FC600_R5_TP FX.B 33554640 6620868 20 6249518 19 6620868 0
Je voudrais comparer le fichier 1 et le fichier 2 en utilisant leurs premières colonnes et supprimer la ligne ou la ligne entière du fichier 2 où ils correspondent dans le fichier 1. Je voudrais également enregistrer les résultats dans un troisième fichier, le fichier # 3.
la source
Rapporterait les lignes qui ne sont que
f2
.Indiquerait les lignes
f2
dont le premier champ est introuvable comme premier champ d'une ligne def1
.(vous avez besoin d'un shell prenant en charge la substitution de processus comme
ksh93
,zsh
oubash
).la source
Juste pour le plaisir, voici une solution en Perl:
Exemple
Détails
La solution Perl ci-dessus est composée de 2 boucles. La première boucle lit toutes les lignes depuis
file1
et crée un hachage,%names
où chaque colonne que nous identifions est ajoutée.La 2e
while
boucle passe ensuite sur le 2e fichier,file2
et la colonne 1 de chaque ligne est identifiée à l'aide de l'expression régulière:Ce qui précède dit que depuis le début de la ligne, faites correspondre tout ce qui n'est pas un espace et enregistrez-le dans la variable temporaire
$1
. Il est sauvé en enroulant des parens autour. Le.*
dit de faire correspondre tout le reste sur la ligne.Le bit suivant de ces lignes indique de rechercher le bit de la colonne 1 que nous venons d'enregistrer
$1
dans le%names
hachage:S'il est présent là-bas, nous ne voulons pas l'imprimer. S'il n'est pas là, imprimez-le.
la source
Méthode 1 # Bash
Méthode 2 # seulement Grep
grep fonctionne, mais pas une garantie
la source
Permet de l'obtenir comme
Fichier # 1: file1.txt
Fichier # 2: file2.txt
Exécutez ensuite le suivi sur le terminal
output.txt contiendra les résultats souhaités.
Explication:
la source