1 votes

UNIX, comparez le 1er champ de File3 avec le 1er champ de File 2

Supposons que j'ai trois fichiers d'entrée comme indiqué ci-dessous :

File 1
 1001 1 2 3 
 1002 4 5 6 
 1003 7 8 9
 1004 10 11 12 

File 2
 1001 11 22 33 
 1002 44 55 66
 1004 100 111 122  

File 3
 1001 111 222 333 
 1004 130 141 152  

Je voudrais comparer le premier champ du fichier 3 avec le premier champ du fichier 2. Si un premier champ particulier du fichier 2 n'existe pas dans le fichier 3, alors je veux supprimer toute cette ligne du fichier 2.

Par exemple, la première rubrique de la rangée 2 du fichier 2 (=1002) n'existe pas dans le fichier 3. Je veux donc supprimer cette ligne du fichier 2 et la sauvegarder.

Maintenant, je veux comparer le fichier 3 et le fichier 1. Nous voyons que le premier champ de la deuxième ligne (=1002) et le premier champ de la troisième ligne (=1003) du fichier 1 n'existent pas dans le fichier 3.

Je veux supprimer ces deux lignes du fichier 1 et le sauvegarder.

Après les étapes ci-dessus, les trois fichiers seront les suivants :

File 1
 1001 1 2 3
 1004 10 11 12  

File 2
 1001 11 22 33
 1004 100 111 122 

 File 3
 1001 111 222 333 
 1004 130 141 152

0voto

steeldriver Points 118154

Utilisation de Awk :

awk 'NR==FNR {a[$1]++; next} $1 in a {print > FILENAME ".tmp"}' File3 File2 File1

et ensuite

mv File1.tmp File1
mv File2.tmp File2

Si vous disposez d'une version suffisamment récente de GNU Awk (alias gawk ), vous pouvez tout simplement le faire :

awk -i inplace 'NR==FNR {a[$1]++} !($1 in a) {next} 1' File3 File2 File1

Ex.

$ awk -i inplace 'NR==FNR {a[$1]++} !($1 in a) {next} 1' File3 File2 File1

$ head File{1..3}
==> File1 <==
 1001 1 2 3 
 1004 10 11 12

==> File2 <==
 1001 11 22 33 
 1004 100 111 122

==> File3 <==
 1001 111 222 333 
 1004 130 141 152

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X