1 votes

Recherche d'un langage simple pour obtenir la différence de la sortie de l'awk.

Disons que j'ai deux fichiers comme ci-dessous :

file1

a 23
b 34
c 47

file2
a justin_beiber_sucks
b segmentation fault
c jackson
d nop

Maintenant ce que je veux c'est obtenir une différence de la première colonne de deux fichiers. Je le fais maintenant comme suit

$cat file1 awk '{print $1}'> f1
$cat file2 awk '{print $1}'> f2
$diff -u f1 f2

Mais cette approche semble attardée. Une approche plus délicate ?

Le problème est que je vois toujours pipe comme une chose unidimensionnelle, mais ici c'est bidimensionnel. Je veux dire que l'entrée du différentiel doit provenir de deux sources différentes simultanément.

Le point de départ peut être l'awk script qui lira les deux fichiers, effectuera un filtrage et enregistrera le résultat dans un tableau associatif temporaire, ensuite il invoquera diff et fournira ses entrées.

5voto

Sirex Points 5377

Essayez :

diff -u <(awk '{print $1}' file-one) <(awk '{print $1}' file-two)

0 votes

@DennisWilliamson, j'aimerais pouvoir éditer les commentaires. Je vais le supprimer et le recréer.

1 votes

Également connu sous le nom de substitution de processus. tldp.org/LDP/abs/html/abs-guide.html#PROCESS-SUB

0 votes

Le lien vers cette page sera plus approprié tldp.org/LDP/abs/html/abs-guide.html#PROCESS-SUB

1voto

jason saldo Points 5036

Il y a de bonnes chances que join fera ce que vous voulez :

join <(sort file1) <(sort file2)

Mais comme vous ne dites pas ce que vous essayez vraiment d'accomplir, il est difficile de déterminer quelles options pourraient être appropriées.

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