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