GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer les lignes basées sur les doublons dans une colonne sans tri ?

J'ai de gros fichiers à 3 colonnes (~ 10 000 lignes) et je voudrais supprimer des lignes lorsque le contenu de la troisième colonne de cette ligne apparaît dans la troisième colonne d'une autre ligne. La taille des fichiers rend le tri un peu lourd, et je ne peux pas utiliser quelque chose comme le code ci-dessous car les lignes entières ne sont pas identiques; juste le contenu de la colonne 3.

awk '!seen[$0]++' filename

Réponse acceptée :

Remplacez simplement votre commande awk par la colonne dans laquelle vous souhaitez supprimer les lignes en double en fonction de cette colonne (dans votre cas, la troisième colonne) :

awk '!seen[$3]++' filename

Cette commande indique awk quelles lignes imprimer. La variable $3 contient tout le contenu de la colonne 3 et les crochets sont un accès au tableau. Ainsi, pour chaque troisième colonne de ligne dans filename, le nœud du tableau nommé seen est incrémenté et la ligne imprimée si le contenu de ce nœud (colonne3) n'était pas (! ) précédemment défini.

Ci-dessus fonctionnera si vos colonnes dans le fichier d'entrée sont délimitées par des espaces/tabulations, si c'est autre chose, vous devrez lui dire de se réveiller avec son -F option. Ainsi, par exemple si des colonnes délimitées par des virgules(, ) et souhaite supprimer les lignes basées sur la troisième colonne, utilisez la commande comme suit :

awk -F',' '!seen[$3]++' filename

Linux
  1. Comment supprimer les lignes en double dans un fichier texte ?

  2. Supprimer les lignes vides dans un fichier texte via grep

  3. Fichier de tri du shell Linux selon la deuxième colonne ?

  4. Supprimer les lignes paires ou impaires d'un fichier texte

  5. Supprimer les N premières lignes d'un fichier journal actif

Comment recharger les règles Udev sans redémarrage ?

Trier et compter le nombre d'occurrences de lignes ?

Concaténer des lignes en fonction du premier caractère de la ligne suivante ?

Trier la sortie par colonne ?

Comment trier la commande supérieure en fonction de l'utilisation de la mémoire

Obarun - Une distribution Linux basée sur Arch sans Systemd