Je vais poser ma question avec un exemple. J’ai 2 fichiers:
Fichier n ° 1
002948998 752986QAK NTR974VTS 0000000 102948932 752986QSC NTR974VTS 0000000 102948933 752986QSC NTR974VTS 0000000
Fichier n ° 2
002901998 752986KFK NTR974MTS 0990000 002948998 752986QAQ NTR974VTS 0000000 002901998 752986KFK NTR974MTJ 0990000
Sortie désirée :
002948998 752986QAK NTR974VTS 0000000 102948932 752986QSC NTR974VTS 0000000 102948933 752986QSC NTR974VTS 0000000 002901998 752986KFK NTR974MTS 0990000
Note: il n’y a pas d’espace (enter) entre les lignes.
Je voudrais comparer le fichier 1 et le fichier 2 en utilisant leurs premières colonnes et supprimer la ligne entière du fichier 2 s’ils correspondent au fichier 1. Je souhaite également enregistrer les résultats dans un premier fichier ou un nouveau fichier, fichier # 3 qui contient toutes les entrées du fichier 1 et du fichier 2 (sans les doublons du fichier 2). S’il vous plaît aviser une bonne résolution en script shell.
actuellement j’utilise:
awk 'FNR==NR {a[$1];print;next} !($1 in a)' file1 file2 > file3
mais il ne se compare pas en fonction de la première colonne seulement. au lieu de cela, il compare la ligne entière.
S’il vous plaît aider.
Ceci est un idiome célèbre: imprimez une ligne uniquement lorsque le premier champ est vu pour la première fois:
awk '!seen[$1]++' file1 file2 > file3
002948998 752986QAK NTR974VTS 0000000 102948932 752986QSC NTR974VTS 0000000 102948933 752986QSC NTR974VTS 0000000 002901998 752986KFK NTR974MTS 0990000
Cela repose sur:
Préserver toutes les lignes du premier fichier, tout en supprimant les dups dans le second fichier
awk '!seen[$1]++ || NR==FNR' file1 file2 > file3
Peut être:
cp file1 file3; grep -Fv "$(cut -f 1 -d ' ' < file1)" file2 >> file3