2011-07-12 20 views
1

Je dois supprimer des lignes avec une valeur en double. Par exemple, j'ai besoin de supprimer les lignes 1 et 3 dans le bloc ci-dessous car elles contiennent "Value04" - Je ne peux pas supprimer toutes les lignes contenant Value03 parce qu'il y a des lignes avec ces données qui ne sont pas dupliquées. Je peux utiliser n'importe quel éditeur; excel, vim, toutes les autres lignes de commande Linux. En fin de compte, il ne devrait pas y avoir de valeurs "UserX" en double. Utilisateur1 ne devrait apparaître qu'une fois. Mais si User1 existe deux fois, je dois enlever toute la ligne contenant « Value04 » et de garder celui avec « Value03 »Supprimer des lignes avec des cellules en double

Value01,Value03,User1 
Value02,Value04,User1 
Value01,Value03,User2 
Value02,Value04,User2 
Value01,Value03,User3 
Value01,Value03,User4 

Vos idées et pensées sont grandement appréciés. Editer: Pour plus de clarté et pour sortir les mots du processus d'édition.

+1

pouvez-vous poster ce que vous aimeriez avoir à la fin? – Randy

+0

La ligne 2 ne contient * pas * "Value03", sauf si vous commencez à compter à partir de 0. –

+0

Voulez-vous supprimer les lignes suivantes: Value01, Value03, User2 | Value01, Value03, Utilisateur3 | Value01, Value03, User4 – wleao

Répondre

1

La awk suivante supprime tous, mais la première occurrence d'une valeur dans la troisième colonne:

$ awk -F',' '{ 
    if (!seen[$3]) { 
    seen[$3] = 1 
    print 
    } 
}' textfile.txt 

Sortie:

Value01,Value03,User1 
Value01,Value03,User2 
Value01,Value03,User3 
Value01,Value03,User4 
+0

J'ai éclairci ma question ... – AaronJAnderson

+0

Édité ma réponse. –

0

même chose en Perl:

perl -F, -nae 'print unless $c{$F[2]}++;' textfile.txt 

ceci utilise le mode autosplit: "-F, -a" se sépare par virgule et place le résultat dans le tableau @F

Questions connexes